Pandas多列查找NaN值触发KeyError:报错解析与解决方法
解决Pandas筛选含NaN行的KeyError问题
错误原因
你用df['col1', 'col2', 'col3']的写法是错误的——Pandas中选择多列需要双层方括号,单层方括号传入元组会被当作单个列名去查找,而你的数据集可能存在重复列名,进一步触发了维度相关的KeyError。
修复方案
1. 修正列选择语法
把列选择部分改成双层方括号,这是Pandas选多列的标准写法:
# 替换空格为NaN(补充完整流程) import numpy as np df = df.replace(' ', np.nan) # 筛选指定列中含NaN的行 nan_rows = df[df[['col1', 'col2', 'col3']].isna().any(axis=1)]
2. 处理重复列名(如果存在)
如果数据集确实有重复列名,先通过重命名解决:
# 给重复列添加后缀区分 df.columns = [f"{col}_{idx}" if df.columns.tolist().count(col) > 1 else col for idx, col in enumerate(df.columns)] # 再执行筛选 nan_rows = df[df[['col1', 'col2', 'col3']].isna().any(axis=1)]
3. 筛选所有列中含NaN的行(如果不需要指定列)
如果要找任意列含NaN的行,直接简化代码:
nan_rows = df[df.isna().any(axis=1)]
验证结果
运行上述代码后,nan_rows会包含所有目标列(或所有列)中存在NaN的行,即你期望的row1、row3、row4、row5。
内容的提问来源于stack exchange,提问作者Deidraak
相关产品推荐
相关产品推荐

