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

如何创建以Pandas DataFrame为参数的非循环空值填充函数?

用Pandas替换DataFrame列空值为众数(无循环实现)

直接上可运行的函数实现,完全不需要循环,利用Pandas内置方法完成需求:

import pandas as pd

def fill_null_with_mode(df):
    # 创建输入DataFrame的副本,避免修改原数据
    df_copy = df.copy()
    # 计算每列的众数,取第一个众数值(处理一列存在多个众数的情况)
    column_modes = df_copy.mode().iloc[0]
    # 按列匹配众数并填充空值
    df_copy.fillna(column_modes, inplace=True)
    return df_copy

关键步骤说明

  • 副本创建:df.copy()保证函数操作的是独立副本,不会对传入的原始DataFrame产生副作用,严格符合返回副本的要求。
  • 众数计算:mode()方法会返回每列的所有众数(若某列有多个值出现频率相同),返回结果是一个DataFrame;iloc[0]提取第一行,得到以原DataFrame列名为索引、对应列众数为值的Series。
  • 空值填充:fillna()方法支持传入Series参数,会自动根据索引匹配到对应列,批量填充该列的所有空值,全程依赖Pandas的向量化操作,无需手动循环。

示例验证

# 构造测试数据
test_df = pd.DataFrame({
    'NumCol': [3, 1, 1, None, 2, 1],
    'StrCol': ['apple', 'banana', 'apple', None, 'banana', 'banana'],
    'FloatCol': [None, 2.5, 2.5, 3.0, None, 2.5]
})

# 调用函数填充空值
filled_df = fill_null_with_mode(test_df)
print(filled_df)

输出结果:

NumCol  StrCol  FloatCol
0     3.0   apple       2.5
1     1.0  banana       2.5
2     1.0   apple       2.5
3     1.0  banana       3.0
4     2.0  banana       2.5
5     1.0  banana       2.5

可以看到:

  • NumCol的众数是1,填充了第3行的空值
  • StrCol的众数是banana(出现3次),填充了第3行的空值
  • FloatCol的众数是2.5,填充了第0和第4行的空值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 10:10:27