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

Pandas DataFrame空值替换失效:循环判断列类型后未生效

问题原因及解决方案

你的代码没生效的核心原因是:Pandas的fillna()方法默认不会修改原DataFrame/Series,而是返回一个填充空值后的新对象。你既没把这个新对象赋值回原列,也没启用原地修改的参数,所以原DataFrame的空值完全没变化。

修复方法一:启用原地修改(inplace=True)

直接在fillna()里加inplace=True参数,让方法直接修改原列:

for col in WHO_df:
    if WHO_df[col].dtype == 'float64':
        WHO_df[col].fillna(WHO_df[col].mean(), inplace=True)
    else:
        WHO_df[col].fillna(0, inplace=True)

修复方法二:赋值回原列(更推荐)

把fillna()返回的新Series赋值回原列,这种方式更安全,避免inplace操作可能带来的副作用:

for col in WHO_df:
    if WHO_df[col].dtype == 'float64':
        WHO_df[col] = WHO_df[col].fillna(WHO_df[col].mean())
    else:
        WHO_df[col] = WHO_df[col].fillna(0)

更简洁的Pandas风格写法

如果不想用循环,可以先构建填充规则字典,再一次性完成填充,效率更高(适合大数据集):

# 生成各列对应的填充值字典
fill_rules = {
    col: WHO_df[col].mean() if WHO_df[col].dtype == 'float64' else 0
    for col in WHO_df.columns
}
# 批量填充空值
WHO_df = WHO_df.fillna(fill_rules)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 18:01:05