使用pandas dropna(subset=['C'])时触发KeyError:['C']报错如何解决
问题成因
报错的核心原因是CSV表头的列名前带有多余空格,pandas默认读取时会原样保留列名:你定义的CSV表头为A, B, C, D,每个逗号分隔符后都有一个空格,实际读入DataFrame后的列名为'A'、' B'、' C'、' D'(B/C/D列名前都带一个前置空格)。此时传入subset=['C']查找名为'C'的列时,pandas匹配不到对应列,就会抛出KeyError: ['C']。
可以执行print(df.columns.tolist())快速验证,输出会直接显示列名带前置空格的问题。
解决方法
根据使用场景选以下任意一种方案即可:
- 读入CSV时自动清理分隔符后的空格:调用
read_csv时加入skipinitialspace=True参数,这是最推荐的方案,从读入环节就避免列名带空格的问题,后续所有列操作都不会受多余空格影响。
修正后的读入代码:df = pd.read_csv(StringIO(csv_data), skipinitialspace=True) - 已读入数据后批量清理列名空格:如果不想重新读入数据,可以直接对列名做首尾空白字符去除处理:
df.columns = df.columns.str.strip() - 直接匹配带空格的列名:临时调试可以直接传入带前置空格的列名
df.dropna(subset=[' C']),但不推荐长期使用,后续写代码时很容易因为忘记空格存在反复触发同类报错。
修正后执行df.dropna(subset=['C'])就能正常删除C列存在空值的行,输出结果如下:
A B C D 0 1.0 2.0 3.0 4.0 2 10.0 11.0 12.0 NaN
内容的提问来源于stack exchange,提问作者Crackerslover
相关产品推荐
相关产品推荐

