Pandas DataFrame读取csv后访问指定列报错是什么原因?如何解决?
问题原因
- 列名带多余前置空格:CSV表头的分隔逗号后带有空格,pandas默认会把空格也识别为列名的一部分,你可以执行
print(df3.columns)验证,会看到列名实际为[' p1', ' p2', ' p3', ' p4', ' vis'],vis前面多了一个空格,所以直接写df3['vis']找不到对应列。 - 索引方式错误:
df3[整数]的写法默认是匹配列名等于该整数的列,不是按位置取列,你当前没有名为0的列,所以报错。
解决方法
方法1:读取时自动处理空格
调用pd.read_csv时添加skipinitialspace=True参数,自动忽略逗号后的空格,直接得到规范列名:
df3 = pd.read_csv('test2.csv', index_col=0, skipinitialspace=True) # 后续可正常访问列 print(df3['vis'])
方法2:已读取数据则手动清理列名
如果已经加载了数据,直接批量去除所有列名前后的空白字符即可:
df3.columns = df3.columns.str.strip() print(df3['vis'])
方法3:按位置索引取列
如果需要按位置序号取列,用iloc属性即可,比如取最后一列(vis列)的写法为:
# :表示选取所有行,-1表示取倒数第一列 print(df3.iloc[:, -1]) # 取第一列就把-1替换为0 print(df3.iloc[:, 0])
内容的提问来源于stack exchange,提问作者KansaiRobot
相关产品推荐
相关产品推荐

