如何移除DataFrame中的NaN值?fillna填充均值失效问题排查
问题排查与解决方法
你的操作存在核心逻辑错误,是导致fillna不生效、返回空记录的直接原因:
- pandas 中绝大多数 DataFrame 处理方法默认不会修改原始数据,而是返回修改后的新副本。你两次调用
fillna()既没有将返回结果赋值回原变量,也没有开启原地修改参数,所以原数据集里的NaN值不会发生任何变化。 - 第一次调用加
.head()返回0条记录,先执行print(len(cleaned_customer_data))检查数据集本身行数,如果行数为0,说明你之前做数据筛选、切片的步骤把所有数据过滤空了,和fillna操作本身无关。 - 额外注意:如果数据集包含非数值类型列,直接调用
.mean()会触发警告,部分pandas版本中会直接跳过所有列的均值计算,导致填充失效。
正确代码写法
两种写法二选一即可,官方更推荐第一种写法,能避免inplace参数带来的链式操作隐患:
- 接收返回值重新赋值
# 仅针对数值列计算均值填充NaN cleaned_customer_data = cleaned_customer_data.fillna(cleaned_customer_data.mean(numeric_only=True)) # 查看前5行验证结果 print(cleaned_customer_data.head())
- 开启原地修改参数
cleaned_customer_data.fillna(cleaned_customer_data.mean(numeric_only=True), inplace=True) print(cleaned_customer_data.head())
效果验证
针对你给出的FEATURE1列样本,有效数值为2.0和1.294,计算得均值为1.647,填充后结果如下:
FEATURE1 0 1.647 1 2.000 2 1.647 3 1.647 4 1.647 5 1.294
内容的提问来源于stack exchange,提问作者Khilesh Chauhan
相关产品推荐
相关产品推荐

