2017-02-20 2 views
0

Ich habe Spalten, die ich aus meiner CSV-Datei extrahieren möchte. Dafür schrieb ich jeder eine Spalte wie folgt:So wählen Sie eine Spalte nach ihrem Namen in Pandas und haben die Spalte ein Array kein Wörterbuch

train_error,cv_error,test_error 
25.4965,25.3198,25.8298 
25.7468,25.4954,26.0417 
25.8253,25.6034,26.1515 
26.3315,26.0611,26.6243 
26.1648,25.92,26.4781 
26.2192,25.9808,26.5419 
26.3396,26.0814,26.6447 
26.2184,25.9735,26.5339 
26.2553,26.0105,26.5733 
26.2683,26.0142,26.5763 
26.1743,25.9286,26.4885 
26.1716,25.9236,26.4836 
26.1836,25.9345,26.495 
26.1548,25.9083,26.4684 
26.1505,25.9022,26.4617 
26.1342,25.887,26.4463 
26.1468,25.8994,26.4592 
26.1453,25.8976,26.4574 
26.1322,25.8854,26.445 
26.132,25.8842,26.4438 
26.1297,25.8828,26.4423 

Jeder schlägt vor, dass ich Pandas benutze. Ich habe sein API gesehen, und ich kann die Spalten anscheinend nicht auf eine Weise erhalten, die tatsächlich den Namen der Spalte verwendet. Der einzige Weg, um, sagen wir, die train_errors indiziert mit einem 0 wie folgt:

df = pd.read_csv('./tmp_errors/error_file.csv') 
print(df.as_matrix()[:,0]) 

Ist das wirklich der einzige Weg, es zu tun? Ich hatte gehofft, ich könnte das tatsächliche Wort train_error oder etwas in meinem Code verwenden, um es lesbarer zu machen oder ein Wörterbuch mit diesen Schlüsseln und Feldern zu machen, die auf die Fehler zeigen. Wenn ich es nicht kann und ich bin gezwungen, mit 0, 1, 2 etc. zu indizieren, was ist dann der Punkt, die benannten Spalten zu haben?

Gibt es eine Möglichkeit, die Namen der Spalten zu verwenden, um die Daten zu extrahieren?


In der anderen Antwort, dass es scheint zu tun:

df.to_dict() 

gibt fast, was ich will, mit der Ausnahme, dass statt ein Wörterbuch mit den Tasten als Name der Spalten zu haben, sind die Reihen ein Wörterbuch Zahlen. Wie in:

{'cv_error': {0: 25.319800000000001, 1: 25.4954, 2: 25.603400000000001, 3: 26.0611, 4: 25.920000000000002, 5: 25.980799999999999, 6: 26.081399999999999, 7: 25.973500000000001, 8: 26.0105, 9: 26.014199999999999, 10: 25.928599999999999, 11: 25.9236, 12: 25.9345, 13: 25.908300000000001, 14: 25.902200000000001, 15: 25.886999999999997, 16: 25.8994, 17: 25.897600000000001, 18: 25.885400000000001, 19: 25.8842, 20: 25.8828}, 'train_error': {0: 25.496500000000001, 1: 25.7468, 2: 25.825299999999999, 3: 26.331499999999998, 4: 26.1648, 5: 26.219200000000001, 6: 26.339600000000001, 7: 26.218399999999999, 8: 26.255299999999998, 9: 26.2683, 10: 26.174299999999999, 11: 26.171600000000002, 12: 26.183599999999998, 13: 26.154800000000002, 14: 26.150500000000001, 15: 26.1342, 16: 26.146799999999999, 17: 26.145299999999999, 18: 26.132200000000001, 19: 26.131999999999998, 20: 26.1297}, 'test_error': {0: 25.829799999999999, 1: 26.041699999999999, 2: 26.151499999999999, 3: 26.624300000000002, 4: 26.478100000000001, 5: 26.541899999999998, 6: 26.6447, 7: 26.533899999999999, 8: 26.5733, 9: 26.5763, 10: 26.488499999999998, 11: 26.483599999999999, 12: 26.495000000000001, 13: 26.468399999999999, 14: 26.4617, 15: 26.446300000000001, 16: 26.459199999999999, 17: 26.4574, 18: 26.445, 19: 26.4438, 20: 26.442299999999999}} 

wünschte, ich wäre es wie etwas gewesen sein:

{'train_error':[25.4965,...,26.1297]} 

mit anderen Worten, das Wörterbuch, das als ein Array fungiert sollte ein Array kein Wörterbuch mit dummer/seltsamer Indizes sein.

+0

'csv' Modul ermöglicht dies mit' DictReader' so ein Punkt _is_. –

+0

Mögliches Duplikat von [Csv-Datei als Wörterbuch mit Pandas lesen] (http://stackoverflow.com/questions/33620982/reading-csv-file-as-dictionary-using-pandas) – Barmar

Antwort

4

Auswahl nach Spaltenname ist ein basic feature of pandas:

df = pd.read_csv('./tmp_errors/error_file.csv') 
print df['train_error'] 
+0

aber warum bekomme ich eine seltsame Nachricht an das Ende? 'Name: train_error, dtype: float64' bekommst du das auch? – Pinocchio

+1

Das ist eine eingebaute Funktion von Pandas, die Ihnen den Namen und den Typ der gerade gedruckten Serie mitteilt. Es ist keine zusätzliche Zeile, und wenn Sie es zurück in eine CSV speichern, wird es nicht Teil davon sein. – ASGM

+0

Ich habe ein weiteres Detail in meiner Frage hinzugefügt, kennen Sie die Antwort? – Pinocchio

Verwandte Themen