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

如何将用众数填充空值的Lambda函数转换为常规函数?

Lambda函数转常规函数:用众数填充空值的正确实现

原Lambda函数的作用是遍历DataFrame的每一列,用该列的众数填充所有空值,最后返回处理后的完整DataFrame。你尝试的代码存在两个关键问题:

  • 循环里一遇到有缺失值的列就直接return,导致函数只返回第一个处理后的列,而非整个DataFrame
  • 没有对整个DataFrame进行修改并返回,逻辑不完整

下面是两种正确的转换方式:

方式一:定义单列处理函数,结合apply使用

这种方式和原Lambda逻辑最接近,只是把匿名的Lambda换成命名函数:

def fill_column_mode(column):
    # 对传入的单个列,用众数填充空值
    return column.fillna(column.mode()[0])

def fill_nn(data):
    # 对DataFrame的每一列应用上面的处理函数
    df = data.apply(fill_column_mode)
    return df

方式二:用循环遍历列,修改DataFrame副本

如果你想完全用循环实现,需要先创建DataFrame的副本,避免修改原数据,然后逐个处理每一列,最后返回完整的副本:

def fill_nn(df):
    # 创建原DataFrame的副本,避免修改原始数据
    filled_df = df.copy()
    for column in filled_df:
        # 不管列有没有空值,直接用众数填充(原Lambda逻辑也会处理无空值的列,不影响)
        filled_df[column] = filled_df[column].fillna(filled_df[column].mode()[0])
    # 循环结束后返回处理好的完整DataFrame
    return filled_df

说明:原Lambda函数会对所有列执行填充操作(即使列没有空值,fillna也不会改变数据),所以第二种方式里可以去掉if df[column].isnull().any()的判断,保持和原逻辑一致;如果想优化,保留判断也可以,只处理有缺失值的列,效果相同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 15:51:01