2017-01-13 5 views
1

Ich erstelle eine CSV-Datei aus einem Pandas-Datenrahmen mit vielen Spalten für unser ERP-System. Die meisten Spalten sind leer oder konstant, aber das importtool des Systems erwartet eine CSV-Datei mit einer bestimmten Spaltenreihenfolge.Python pandas sortiert automatisch Spalten

Wenn der Datenrahmen zu schaffen, ich habe so etwas:

importlist = pd.DataFrame({ 'A': 'TestA', 
          'C': some values, 
          'B': '0'}) 

Wenn ich die Liste zu drucken, werden die Spalten A bestellt, B, C.

Gibt es eine Möglichkeit automatische Bestellung zu verhindern ? Ich weiß, dass ich die Spalten wieder manuell sortieren könnte, aber ich denke, das wäre keine sehr schöne Lösung, weil es etwa 50 Spalten gibt.

+0

Erstellen Sie wirklich einen Datenrahmen wie diesen oder lesen Sie eine Datenquelle aus einer Textdatei oder Datenbank? – Parfait

+0

Ich muss einen DataFrame so erstellen. Dies ist eine Stückliste für Leiterplatten, die in unser ERP-System importiert werden. –

Antwort

3

Der Vollständigkeit halber können Sie auch eine OrderedDict verwenden, die eine Liste von zwei Element Tupel übergeben, wo das erste Element Das Tupel ist der Spaltenname und das zweite Element ist eine Liste von Werten.

pd.DataFrame(OrderedDict([('A',['TestA', 'TestB']), 
          ('C', ['Some Item', 'Other Item']), 
         ('B',[0, 1])])) 

     A   C B 
0 TestA Some Item 0 
1 TestB Other Item 1 
+0

Das funktioniert perfekt! –

1

müssen Sie Parameter übergeben columns mit der Liste der Spalten der gewünschten Reihenfolge, da Standard-Python dict un-ondered ist:

importlist = pd.DataFrame({ 'A': 'TestA', 
         'C': some values, 
         'B': '0'}, columns = ['A','C','B']) 

Probe:

importlist = pd.DataFrame({ 'A': ['TestA'], 
          'C': [4], 
          'B': ['0']}, columns = ['A','C','B']) 

print (importlist) 
     A C B 
0 TestA 4 0 

Oder read_csv verwenden zum Lesen csv wenn möglich.

In docs sind weitere Methoden zur DataFrames zu schaffen, ist einer von ihnen DataFrame.from_items:

a = ['TestA','TestB'] 
b = ['0', '7'] 
c = [4,7] 

print (pd.DataFrame.from_items([('A', a), ('C', c),('B', b)])) 
     A C B 
0 TestA 4 0 
1 TestB 7 7 
Verwandte Themen