fillna()函数填充报错SettingWithCopyWarning

X['Age'].fillna(X['Age'].mean(), inplace=True)运行后会出现

Warning (from warnings module):
  File "D:\Python\Python27\lib\site-packages\pandas\core\generic.py", line 6130
    self._update_inplace(new_data)
SettingWithCopyWarning: 
A value is trying to be set on a copy of a slice from a DataFrame

See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy

报错原因:

这是因为凡是出现链式赋值(例x=y=z=1)的情况,pandas不确定到底返回的是引用还是拷贝。所以干脆报warning,我上边那个函数就是对age列的缺失值全部赋为平均值。

解决方法:

1. 上网查了一下方法很多都说用loc函数,X.loc[:,['Age']].fillna(X['Age'].mean(), inplace=True),虽然不报警了但根本没有真正赋值,缺失值还是NaN(可能是我没有用对方法)。

2. 后来在stackoverflow上找到了另一个解决方法,原文地址:Pandas won't fillna() inplace

X.fillna({'Age':X['Age'].mean()}, inplace=True),用字典就可以完成填充但是无法解决报警信息。。。

希望能有人告知两全其美的解决方法!!!>﹏<

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值