Pandas读取CSV后属性访问Category、Cost列报错原因咨询
问题原因解释
核心原因:CSV表头列名存在多余空格
你给出的CSV文件表头行内容为Category ,Type,Provider,Cost ,可以看到Category后、逗号前多了一个空格,Cost末尾也多了一个空格。pd.read_csv默认会完整保留列名里的空格,所以导入后实际的列名为'Category '(末尾带空格)、'Cost '(末尾带空格),和你尝试访问的Category、Cost完全是两个不同的字符串,自然会抛出属性不存在的错误。
你修改列名的操作本质是顺便删掉了列名末尾的多余空格,所以后续可以正常访问,和Python、Pandas的保留关键字没有关系:Category和Cost都不属于保留关键字,不会触发限制。
补充:Pandas属性访问列的适用限制
除了列名不匹配的问题,属性访问仅在列名满足以下两个条件时可用:
- 列名符合Python标识符命名规则:仅包含字母、数字、下划线,不能以数字开头,不能包含空格、特殊符号
- 列名不与DataFrame内置的属性、方法重名(比如列名为
count、sum时,属性访问会优先指向内置方法,无法读到对应列)
不符合上述条件的列,都可以通过方括号语法正常访问,比如你导入原文件后执行bills['Category ']、bills['Cost ']就能读到对应数据。
解决方案
你可以选择两种方式处理:
- 修改CSV文件,删掉表头所有列名前后的多余空格
- 读取CSV时添加
skipinitialspace=True参数,自动忽略列名和数值前的多余空格:
bills = pd.read_csv('Bills.csv', skipinitialspace=True)
内容的提问来源于stack exchange,提问作者Judah
相关产品推荐
相关产品推荐

