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

如何用自定义Python函数将DataFrame列中NaN值替换为列均值?

问题修正方案

你的自定义函数无法正常运行的核心问题有三个,对应修正如下:

核心错误点

  • 处理方向错误:apply传入axis=1是按行处理,但我们需要按列计算均值并填充,应该改为axis=0。
  • NaN判断逻辑错误:Pandas中的NaN是特殊浮点值,不能用x is None识别,必须用pd.isna()或np.isnan()判断单个元素。
  • 函数逻辑偏差:原函数把整列/整行当成单个元素判断,没有针对每个NaN值执行替换操作。

修正后的自定义函数实现

方案一:遍历元素处理

import pandas as pd
import numpy as np

def fill_col_with_mean(col):
    # 提前计算当前列的均值,避免重复计算
    col_mean = col.mean()
    # 遍历列内每个元素,替换NaN为列均值
    return [col_mean if pd.isna(val) else val for val in col]

# 按列应用自定义函数
df2 = df.apply(fill_col_with_mean, axis=0)

方案二:结合Pandas内置方法(更简洁)

如果想保留自定义函数的形式,也可以直接在函数内调用fillna,逻辑和你找到的简洁方案一致:

def fill_col_with_mean(col):
    return col.fillna(col.mean())

df2 = df.apply(fill_col_with_mean, axis=0)

为什么原代码无效?

  • 当使用axis=1时,apply会把每一行作为Series传入my_func,此时x is None永远为False,直接返回原行,完全没处理NaN。
  • 即使改成axis=0,x是整列的Series,x is None仍然不成立,函数直接返回原列,没有执行替换逻辑。
  • Pandas中的NaN不等于None,必须用专门的检测函数才能识别。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 05:42:42