无法访问数据框列

时间:2016-08-11 10:41:53

标签: python csv pandas dataframe removing-whitespace

我从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'对象没有属性' 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标识符,因此这些列不能作为数据框属性使用。我仍然可以访问它们dict风格:

> jobNames[' job_name']

3 个答案:

答案 0 :(得分:6)

使用skipinitialspace=True传递SELECT QUESTIONS_ID, (CASE WHEN MAX(RESPONSE) = '11' AND MIN(RESPONSE) = '11' THEN 'ONLY 11' WHEN SUM(CASE WHEN RESPONSE = '11' THEN 1 ELSE 0 END) > 0 THEN 'SOME 11' ELSE 'NO 11' END) as INFO_11 FROM DB.[dbo].[T_FCT_QUESTIONS] WHERE CALENDAR_MONTH = '201607' GROUP BY QUESTIONS_ID; 标记来删除CSV分隔符后的空格。

答案 1 :(得分:3)

从列名中删除空格的另一种解决方案是str.strip

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

0     Foo
1     Moo
2     Goo
3    Flue
4     Tru

答案 2 :(得分: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