使用字典重命名整数类型列名时触发KeyError问题排查
解决DataFrame列名替换时的KeyError问题
问题分析
触发KeyError: 0的核心原因是:你遍历的DataFrame列名(整数类型0)在字典id_to_state中找不到对应键——要么字典的键是字符串类型(比如"0"),要么列名类型和字典键类型完全不匹配。
你尝试转换列名类型但未生效,大概率是调用转换函数后没有重新赋值给原DataFrame,或者转换方式没彻底改变列名的类型。
解决方案
1. 先明确类型匹配关系
先打印列名和字典键的类型,确认二者的差异:
# 查看第一个列名的类型 print(type(unemply_states.columns[0])) # 查看字典第一个键的类型 print(type(list(id_to_state.keys())[0]))
2. 正确转换列名类型
根据上面的结果选择对应转换方式:
如果字典键是字符串,把列名转为字符串:
# 直接用astype转换更可靠 unemply_states.columns = unemply_states.columns.astype(str)或者用列表推导生成新的Index:
import pandas as pd unemply_states.columns = pd.Index([str(col) for col in unemply_states.columns])如果字典键是整数,把列名转为整数(仅当列名是字符串形式的数字时适用):
unemply_states.columns = unemply_states.columns.astype(int)
注意:调用转换函数后必须重新赋值给原DataFrame,比如:
unemply_states = convert_int_column_names_to_str(unemply_states)否则原DataFrame的列名不会被修改。
3. 更安全的列名替换方式
不用手动遍历列名,直接用pandas的rename方法,它会自动匹配键值,不匹配的列名会保留,避免报错:
unemply_states = unemply_states.rename(columns=id_to_state)
内容的提问来源于stack exchange,提问作者Brian Coding
相关产品推荐
相关产品推荐

