【问题标题】:Can't access dataframe columns无法访问数据框列
【发布时间】:2016-12-18 01:25:08
【问题描述】:

我正在从 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']

【问题讨论】:

    标签: python csv pandas dataframe removing-whitespace


    【解决方案1】:

    当使用pandas.read_csv 传入skipinitialspace=True 标志以删除CSV 分隔符后的空格时。

    【讨论】:

      【解决方案2】:

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

      jobNames.columns = jobNames.columns.str.strip()
      print (jobNames.job_name)
      
      0     Foo
      1     Moo
      2     Goo
      3    Flue
      4     Tru
      

      【讨论】:

        【解决方案3】:

        另一种(可能较差的)方法是从列名中删除空格:

        > 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    
        

        【讨论】:

          猜你喜欢
          • 2020-06-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多