Python使用Pandas做数据离散化时报列名KeyError问题求助
问题解决方案
错误原因
你遇到的KeyError: 'GRANGE_REG'错误,是因为你的DataFrame中不存在名为GRANGE_REG的列,结合LEG列可以正常处理,问题通常为以下两类:
- 列名拼写错误:手写的列名和实际列名不一致,大概率是拼写偏差,比如实际列名是
GRANDE_REG,你误写为GRANGE_REG - 列名携带隐形字符:导入ods格式文件时,列名可能前后携带空格、特殊符号等不可见字符,导致名称匹配失败
排查方法
运行如下代码输出所有列名,即可确认准确的列名:
print([col for col in X.columns])
拿到正确列名后,替换coluna列表中错误的GRANGE_REG即可解决报错。
离散化代码优化
你当前的离散化实现存在两个明显问题:
- 全局
replace操作会误替换其他列中与当前列分类值相同的内容,导致其他列数据异常 - 双层循环的实现效率极低,数据量较大时运行耗时非常久
你可以直接使用Pandas内置的factorize方法完成分类编码,和你原有逻辑完全一致,是将分类值映射为从0开始的连续整数,代码更简洁高效:
# 注意原列表中LEG重复定义,这里已去重 coluna = ["LEG","GRANGE_REG", "SIGLA_UF", "NOME", "TIPO", "CAT_ASSOC", "NOME_MUN"] for col in coluna: X[col], _ = pd.factorize(X[col]) print('处理后的数据:') print(X[col])
内容的提问来源于stack exchange,提问作者Gabriel Ferreira Franco
相关产品推荐
相关产品推荐

