报错语句:
df['Age'][df.Age.isnull()]=age_null_random_list #选中Age列,然后用布尔索引选中那些为null的位置
这句代码原意为,将改dataframe的Age列中那些为null的位置用一个list来一一对应地赋值。
但是由于使用了链式索引(连续多次索引),而pandas无法确定索引结果是副本还是视图,故提示有可能赋值没有按照预期工作(如果你希望修改原始数据,但实际上索引结果是副本,则没有修改原始数据;如果你希望修改副本而不要修改原始数据,但实际上索引结果是视图,则原始数据也被修改了)。
解决办法是使用loc将链式索引更改为单次索引操作,即修改为:
df.loc[df.Age.isnull(),'Age']=age_null_random_list
总结:
- 避免对链式索引的结果赋值,有可能会报warning也有可能不会报。即使报了,可能有问题,也可能没问题。
- 如果需要用到多级选取,则用loc
- 如果需要对副本操作,在索引操作之后明确地使用copy()函数
参考资料(强烈推荐):
https://www.jianshu.com/p/72274ccb647a
https://blog.youkuaiyun.com/haolexiao/article/details/81180571