'DataFrame'对象没有属性'col_name'

时间:2017-09-12 06:04:56

标签: python pandas

我使用

读取了一个csv文件
x = pd.read_table('path to csv')

我可以在打印x上看到以行为单位的逗号分隔的数据值列表,这很好。但是当我尝试使用x.col1访问任何列时,它会出错:

**AttributeError: 'DataFrame' object has no attribute 'col1'**

我也尝试过:

y = DataFrame(x)

并通过y检索列但没有运气。但是,命令x.columns有效。只是不知道这里有什么问题。

请帮助!!

3 个答案:

答案 0 :(得分:1)

我认为read_table有默认的分隔符标签,因此必须定义分隔符参数:

x = pd.read_table('path to csv', sep=',')

或者使用read_csv与默认分隔符,,因此sep:可以省略。

x = pd.read_csv('path to csv')

答案 1 :(得分:0)

尝试使用以下方法去除列名称周围的潜在空格:

x.columns = [col.strip() for col in x.columns.tolist()]

或者正如文件here中所建议的那样,并在@ jezrael的回答中强调:

x.columns = x.columns.str.strip() 

然后,您将能够使用x.col1..x.coln访问列。另请注意,列名称区分大小写。

实施例

>>> import pandas as pd 
>>> df = pd.DataFrame([[1,2],[3,4]], columns=[' col1', 'col2 '])
>>> df
    col1  col2 
0      1      2
1      3      4
>>> df.col1
Traceback (most recent call last):
..    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'col1'
>>> df.col2 
Traceback (most recent call last):
...    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'col2'
>>> df.columns = [col.strip() for col in df.columns.tolist()]
>>> df.col1
0    1
1    3
Name: col1, dtype: int64
>>> df.col2 
0    2
1    4
Name: col2, dtype: int64
>>> 

答案 2 :(得分:0)

我遇到了同样的问题,并检查了所有答案(包括第一个答案),但对我来说都无济于事,直到我运行

 print(dataset.columns.tolist())

然后我找到了魔鬼:

['\xef\xbb\xbfLabel', 'blabla','blabla']

请注意,该行的第一个元素应该是'Label'(顺便说一句,熊猫似乎不欢迎使用'Label'作为标签名称,所以我后来改了其他名称。)

我做了一些挖掘,发现了

  

\ x实际上表示该值是十六进制,是字节顺序标记,表示文本是Unicode。

     

为什么对我们很重要?   您不能假定您读取的文件是干净的。它们可能包含这样的多余符号,可能会使您的脚本丢掉。

this article

我尝试了很多方法来摆脱它,最方便的方法是...在第一列之前添加一个空的','(我使用的是csv,即在该列之前添加一个空列数据集中的第一列(仅适用于垃圾邮件)。因此,这些列证明是:

['\xef\xbb\xbf', 'Label', 'blabla', 'blabla']

问题解决了!