如何解决AttributeError: 'DataFrame' object has no attribute错误

63

我知道这种问题之前已经被问过了,我已经检查了所有的答案并且尝试了几次找到解决方案但是都没有成功。 事实上,我正在使用Pandas调用一个Dataframe。我已经上传了一个csv文件。

dataset from csv

当我输入 data.Countrydata.Year 时,显示第一列和第二列。但是,每次当我输入 data.Number 时,都会出现以下错误信息:

AttributeError: 'DataFrame' object has no attribute 'Number'。

7个回答

63

使用data.columns检查您的DataFrame

它应该打印出类似于这样的内容

Index([u'regiment', u'company',  u'name',u'postTestScore'], dtype='object')

检查隐藏的空白字符..然后您可以重新命名为

data = data.rename(columns={'Number ': 'Number'})

28

我认为包含代码“Number”的列名可能类似于“ Number”或“Number ”。我猜测您的列名中可能有残留的空格。请运行print "<{}>".format(data.columns[1])来查看结果。如果结果类似于< Number>,可以通过以下方式进行修复:

data.columns = data.columns.str.strip()

请参见pandas.Series.str.strip


AttributeError: 'DataFrame'对象没有属性'...' ,其中...是某个列名,通常是由于使用.符号来引用不存在的列名或pandas方法而导致的。

使用.可以访问pandas方法。pandas列也可以使用.(例如data.col)或使用方括号(例如['col'][ ['col1','col2']])进行访问。

data.columns = data.columns.str.strip()是一种快速去除所有列名前后空格的方法。否则,请验证列名或属性是否拼写正确。


5
data = pd.read_csv('/your file name', delim_whitespace=True)
data.Number

现在你可以无误地运行这段代码。


5
尽可能地,请努力提供额外的解释而不仅仅是代码。这样的答案往往更有用,因为它们可以帮助社区成员和尤其是新开发人员更好地理解解决方案的原因,并可以帮助防止需要回答后续问题的情况。 - Rajan

3
快速解决方法:更改Excel导入文件的转换方式。进入“文件”,然后选择“选项”,再选择“高级”。向下滚动并取消选中“使用系统分隔符”。还需要将“小数分隔符”修改为“.”,将“千位分隔符”修改为“,”。最后以CSV(逗号分隔)格式重新保存文件即可。通常,根本原因与CSV文件的创建方式有关。如果不必要,为什么要使用额外的代码呢?跨平台理解和集成是工程/开发的关键。

您好,欢迎来到Stackoverflow!在回答问题之前,如果您能够阅读这些指南,那将是非常棒的。感谢您的配合。 - Shanteshwar Inde

0

将csv文件中的";"替换为","


0
我想让你简单明了地理解。 “'DataFrame' object has no attribute 'Number'/'Close'/or any col name”的原因是因为你看到的列名似乎是“Number”,但实际上它是“ Number”或“Number ”,这个额外的空格是因为在Excel表中列名是以这种格式编写的。你可以在Excel中更改它,或者你可以写 data.columns = data.columns.str.strip() / df.columns = df.columns.str.strip() 但有可能在查询后某些情况下仍会出现相同的错误。 在Excel表中更改名称肯定有效。

0

我知道这不是同一个用例,但这可能会有所帮助:

在我的情况下,我的DataFrame对象没有我想要进行操作的列。

以下条件语句使我避免了AttributeError

if '<column_name>' in test_data.columns:
    # do your operation on the column


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接