Pandas:添加新列触发SettingWithCopyWarning,使用.loc[]仍存在该问题
解决SettingWithCopyWarning的问题
这个SettingWithCopyWarning其实是pandas在给你提个醒:你当前操作的df很可能只是另一个DataFrame的视图(view),而非独立的副本(copy)。比如你之前可能通过切片(比如df = original_df[original_df['col'] > 0])或者部分筛选得到了这个df,这时候df并没有独立存储数据,只是指向原DataFrame的一部分。当你给它添加新列时,pandas不确定你是想修改这个视图,还是原DataFrame,所以抛出这个警告。
不过别担心,有几个简单的方法可以解决:
方法一:提前将df转为独立副本
在添加新列前,先执行这行代码,把df变成完全独立的DataFrame:df = df.copy()之后再执行
df['prob_win'] = prob_win,警告就会消失了。方法二:用
.loc明确指定赋值范围
直接用.loc来添加列,明确告诉pandas你要修改的是当前df的所有行和新列:df.loc[:, 'prob_win'] = prob_win这种方式也能让pandas准确识别你的操作意图,避免警告。
方法三:从源头确保df是副本
如果你的df是从另一个DataFrame筛选出来的,在创建时就加上.copy():# 比如原来的创建方式是 df = original_df[some_condition] df = original_df[some_condition].copy()这样后续操作就不会触发视图相关的警告了。
另外,你已经确认了prob_win和df的维度完全匹配(都是799条记录),所以维度问题可以排除,核心就是视图与副本的区别导致的警告。
内容的提问来源于stack exchange,提问作者Edamame
相关产品推荐
相关产品推荐

