Python pandas按列值删除记录时出现KeyError报错问题求解
问题原因分析
第一个报错 KeyError: True 的原因
你写的过滤语句 cm9_list = cm9_list[cm9_list.columns[0] != 'nan'] 中,cm9_list.columns[0] != 'nan' 是布尔判断表达式,返回值为True或False。把布尔值传入DataFrame的方括号索引时,Pandas会将其识别为列名去检索,你的表中不存在名为True的列,因此触发该报错。
第二个报错 KeyError: 'word' 的核心原因
你修改列名的方式不符合Pandas的规范:cm9_list.columns.values[0] = 'word' 是直接修改Columns Index底层的numpy数组值,但Pandas的Index对象设计为不可变类型,直接修改底层values不会更新Pandas内部的列名映射缓存,就会出现“打印列名显示有word,但实际检索不到”的矛盾情况。
修复步骤
- 先正确修改列名,不要直接操作
columns.values,选择以下任意一种正规方式即可:
# 方式1:直接给columns属性赋值完整列名列表 cm9_list.columns = ['word', 'frequency'] # 方式2:用rename方法定向修改指定列名,兼容性更强 cm9_list = cm9_list.rename(columns={ cm9_list.columns[0]: 'word', cm9_list.columns[1]: 'frequency' })
- 再过滤掉word列的空值,注意如果是真实的NaN缺失值(不是字符串'nan'),需要用Pandas内置的空值判断方法,避免漏判:
# 如果是真实NaN缺失值,用这个 cm9_list = cm9_list[cm9_list['word'].notna()] # 如果确实是字符串类型的'nan',用这个 cm9_list = cm9_list[cm9_list['word'] != 'nan']
内容的提问来源于stack exchange,提问作者pav
相关产品推荐
相关产品推荐

