Pandas DataFrame重命名列后访问报KeyError问题求解
问题原因及排查方法
- 列名夹带不可见空白字符
从DCF文件逐行切分生成矩阵的过程中,若切分逻辑未处理行尾换行符、分隔符多余空格等问题,可能导致重命名后的列名前后夹带空格、制表符、换行符等不可见字符。这类字符在普通打印列名时不会明显显示,你看到的列名是hb,实际值可能为' hb'或'hb\n',直接访问df['hb']就会触发KeyError。
排查方式:执行print([repr(col) for col in df.columns]),输出列名的原始字符串表示即可直接看到是否存在额外字符。 - 重命名操作未实际匹配到目标列
你提到原DataFrame列名为默认数字索引,拼接含字符串列名(x、y、s、fftn)的空DataFrame后,Pandas会自动统一所有列名的数据类型为object,原整数类型的列名1、5、8会被转换为字符串形式的'1'、'5'、'8'。如果你重命名时使用的是df.rename(columns={1:'hb',5:'sb',8:'dev'})写法,参数中的键是整数类型,无法匹配已经转为字符串的列名,重命名实际未生效。你打印列名时看到的重命名结果,可能是其他操作生成的,或是打印了未拼接前的旧DataFrame列名。
排查方式:执行print(df.columns.dtype)查看列名的数据类型,确认重命名时的键类型和实际列名类型一致。 - 变量作用域不一致
如果你在函数内部执行重命名操作,未将修改后的DataFrame返回赋值给全局变量,你后续访问的还是未重命名的旧DataFrame,就会触发KeyError。新增列能正常访问,可能是因为新增操作是在全局作用域执行的。
内容的提问来源于stack exchange,提问作者ASCH
相关产品推荐
相关产品推荐

