Pandas访问ID列报不在索引、iloc[:,0]返回异常问题咨询
故障原因
你视觉上看到的ID不是DataFrame的普通数据列,是行索引的名称,因此按列名选取时会触发不存在的报错。
核心判断依据来自你执行df.iloc[:, 0]返回的Series结果:
- 结果最顶部显示的
ID是这个Series行索引的名称,对应原DataFrame的行索引名 - 结果末尾标注的
Name: NUMBER才是你取到的第一列的真实列名
pandas打印DataFrame时会把行索引放在所有数据列的最左侧,和普通数据列视觉上相邻,很容易被误认成列。你可以执行print(df.columns)查看所有真实存在的列名,执行print(df.index.name)就能验证行索引的名称确实是ID。
解决方案
根据你的合并场景二选一即可:
- 需要把ID作为普通列使用时,先把行索引转为数据列再选取,参考代码如下:
# 将名为ID的行索引转换为普通数据列 df = df.reset_index() # 后续选取列就不会报错,注意列名要和实际大小写一致,你的数值列真实列名为NUMBER df2 = df[['ID', 'NUMBER']]
- 如果做合并操作时只是需要用ID作为匹配键,不需要额外转列,直接在
pd.merge()里设置对应参数即可:如果当前表用ID索引做匹配键,就加left_index=True,另一张表如果也是用ID当索引就加right_index=True,如果另一张表ID是普通列就设置right_on='ID'。
内容的提问来源于stack exchange,提问作者Ziggy
相关产品推荐
相关产品推荐

