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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 08:40:14