Pandas填充age列缺失值触发FutureWarning且填充失败求助
解决Pandas填充缺失值的FutureWarning及赋值无效问题
你遇到的FutureWarning是因为df['age']返回的可能是DataFrame的视图而非独立副本,Pandas 3.0会彻底禁用这种场景下的inplace=True操作。而你尝试的两种方法没生效,大概率是因为当前的df是另一个DataFrame的切片副本(比如通过df = original_df[['col1', 'age']]这类方式生成),导致赋值操作没有作用到实际的DataFrame对象上。
以下是有效解决步骤:
方法一:先将df转为独立DataFrame再赋值
先确保操作的是独立的DataFrame对象,规避副本问题:
# 复制出独立的DataFrame df = df.copy() # 用均值填充age列缺失值 df['age'] = df['age'].fillna(df['age'].mean())
方法二:使用loc直接定位列赋值
通过loc明确指定整列,消除视图/副本的歧义:
df.loc[:, 'age'] = df['age'].fillna(df['age'].mean())
方法三:全局fillna并重新赋值
放弃inplace=True,直接接收fillna返回的新DataFrame:
df = df.fillna({'age': df['age'].mean()})
额外排查点
如果操作后仍未填充,检查df['age'].mean()是否为NaN——若age列非缺失值为空,均值会是NaN,填充后仍为缺失。可以用以下方式确保计算的是非缺失值的均值:
age_mean = df['age'].dropna().mean() df.loc[:, 'age'] = df['age'].fillna(age_mean)
内容的提问来源于stack exchange,提问作者Hira Amin
相关产品推荐
相关产品推荐

