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

for循环中fillna(inplace=True)不生效,如何按分组均值填充缺失值

问题原因
  • 你通过df.loc[df['Director']==i,'Revenue (Millions)']取到的是原始DataFrame的视图副本,对这个副本调用fillna(inplace=True)只会修改临时副本,不会回写到原始df上,pandas不会触发这类隐式操作的报错,所以会出现运行无异常但空值未填充的情况。
解决方法

推荐使用更高效的pandas原生写法,无需手动写循环,性能和可读性都更好:

import pandas as pd
df = pd.read_csv('IMDB-Movie-Data.csv')
# 按导演分组后对Revenue列做transform,返回和原数据长度对齐的均值序列,直接填充空值
df['Revenue (Millions)'] = df['Revenue (Millions)'].fillna(df.groupby('Director')['Revenue (Millions)'].transform('mean'))

如果要修复你原来的循环写法,去掉inplace参数,直接给.loc筛选出来的位置赋值即可:

df = pd.read_csv('IMDB-Movie-Data.csv')
dp = df.groupby('Director')['Revenue (Millions)'].mean()
for i in dp.index:
    # 直接赋值回原df对应位置即可生效
    df.loc[df['Director']==i,'Revenue (Millions)'] = df.loc[df['Director']==i,'Revenue (Millions)'].fillna(dp[i])
补充说明
  • 如果某导演的所有作品Revenue列全部是空值,分组计算得到的均值本身就是NaN,填充后对应位置仍然是空值,你可以后续再加一步全局填充处理这部分残留空值:
# 示例:用全局均值填充剩余空值,也可以替换为0或其他指定值
df['Revenue (Millions)'] = df['Revenue (Millions)'].fillna(df['Revenue (Millions)'].mean())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 18:09:03