2016-08-11 54 views
3

我正在從csv文件導入數據幀,但無法通過名稱訪問其某些列。這是怎麼回事?無法訪問數據幀列

更具體地說:

> 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 

當我嘗試訪問的第二列,我得到一個錯誤:

> jobNames.job_name 

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

奇怪的是,我可以這樣訪問JOB_ID列:

> print(jobNames.job_id) 

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

編輯(把上下文接受的答案):

原來的CSV文件(列名)的第一行是這樣的:

job_id, job_name, num_judgements 

注意每次使用後的空間逗號!這些空間保留在列名稱中:

> jobNames.columns[1] 

' job_name' 

它們不構成有效的Python標識符,因此這些列不可用作數據框屬性。我仍然可以訪問這些字典式:

> jobNames[' job_name'] 

回答

2

skipinitialspace=True標誌使用pandas.read_csv通CSV定界符之後去除空格。

0

其它的(也許不如)方法是從列名中的空格:

> 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

確實,CSV 101陷阱。 –

1

從列名刪除空格,另一種方案是str.strip

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

0  Foo 
1  Moo 
2  Goo 
3 Flue 
4  Tru