You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

pandas使用fillna处理列空值未生效 赋值后触发KeyError问题

问题根因拆解

两次操作分别踩了pandas的两个典型使用误区:

误区1:fillna未生效,空值统计前后无变化

pandas中绝大多数数据转换类方法(包括fillna、replace、apply等)默认不会直接修改原始数据对象,而是返回一个完成转换的副本。
你第一次写的df['col'].fillna(value='no_val')仅在内存中生成了一个填充完成的一维列副本,既没有把这个副本赋值回原列,也没有开启原地修改参数,原始df里的col列完全没有被改动,后续统计空值自然和初始结果完全一致。
对应正确的实现写法:

  • 显式将fillna返回的副本赋值回原列,这也是pandas官方推荐的写法:df['col'] = df['col'].fillna(value='no_val')
  • 开启原地修改参数直接改动原列:df['col'].fillna(value='no_val', inplace=True)

注:pandas新版本中inplace参数已被标记为不推荐使用,长期维护代码更建议采用显式赋值的写法

误区2:修改代码后抛出col字段的KeyError

df['col']本身是一个从二维DataFrame中取出的一维Series对象,不是完整的二维DataFrame结构。
你写的df = df['col'].fillna(value='no_val')这行,实际是把填充完成的单列Series直接覆盖了原本存储二维DataFrame的变量df:此时df已经从多列的表结构变成了单维度的行索引结构,既丢失了其他所有列数据,也不存在名为col的列维度。后续代码再用df['col']访问字段时,自然会因为找不到对应的列名抛出KeyError。

注意:如果要对单列做填充,绝对不要把单列的返回值直接赋值回整个DataFrame变量,只需要把结果赋值回原列位置即可。

内容的提问来源于stack exchange,提问作者user13067694

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 11:45:06