2016-08-11 11 views
3

Ich importiere einen Datenrahmen aus einer CSV-Datei, kann jedoch nicht auf einige Spalten zugreifen. Was ist los?Zugriff auf Datenframe-Spalten nicht möglich

Genauer gesagt:

> import pandas 

> jobNames = pandas.read_csv("job_names.csv") 
> print(jobNames) 

    job_id job_name num_judgements 
0 933985  Foo    180 
1 933130  Moo    175 
2 933123  Goo    150 
3 933094  Flue    120 
4 933088  Tru    120 

Wenn ich versuche, die zweite Spalte zuzugreifen, erhalte ich eine Fehlermeldung:

> jobNames.job_name 

AttributeError: 'DataFrame' object has no attribute 'job_name'

Seltsamerweise ich so die job_id Spalte zugreifen:

> print(jobNames.job_id) 

0 933985 
1 933130 
2 933123 
3 933094 
4 933088 
Name: job_id, dtype: int64 

Edit (die akzeptierte Antwort in Zusammenhang bringen):

Es stellt sich heraus, dass die erste Zeile der CSV-Datei (mit den Spaltennamen) wie folgt aussieht:

job_id, job_name, num_judgements 

Hinweis der Räume nach jedem Komma! Diese Räume werden in den Spaltennamen beibehalten:

> jobNames.columns[1] 

' job_name' 

, die keine gültigen Python-Bezeichner bilden, so enthalten diese Spalten als Datenrahmen Attribute nicht verfügbar sind. Ich kann sie immer noch Zugriff auf dict-style:

> jobNames[' job_name'] 

Antwort

2

Wenn pandas.read_csv Pass in skipinitialspace=True flag verwendet Leerzeichen nach dem Begrenzungszeichen CSV zu entfernen.

0

Eine andere (vielleicht inferior) Ansatz ist es, die Räume von den Spaltennamen zu entfernen:

> jobNames.columns = map(lambda s:s.strip(), jobNames.columns) 
> jobNames.job_name 

0 Foo 
1 Moo 
2 Goo 
3 Flue 
4 Tru 
Name: job_name, dtype: object  
+0

Stimmt, CSV 101 ist fehlgeschlagen. –

1

Eine andere Lösung für Whitespaces aus Spaltennamen zu entfernen, ist str.strip:

jobNames.columns = jobNames.columns.str.strip() 
print (jobNames.job_name) 

0  Foo 
1  Moo 
2  Goo 
3 Flue 
4  Tru 
Verwandte Themen