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
相关产品推荐
相关产品推荐

