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

如何解决Jupyter Notebook中Pandas的SettingWithCopyWarning警告

问题根因
  • 警告触发的核心是df = df[['winner']]这行代码生成了原分组DataFrame的切片对象,Pandas无法确认该对象是指向原数据的视图还是独立副本,后续对该切片直接新增列赋值时就会触发安全警告。
修复方案

方案1(最稳妥,推荐):明确创建独立副本

修改切片行的代码,主动调用.copy()方法生成完全独立的DataFrame,后续修改不会和原数据产生关联,警告直接消除:

# 把原来的 df = df[['winner']] 替换为下面的写法
df = df[['winner']].copy()

方案2:遵循Pandas推荐的赋值规范

新增列时改用.loc索引器赋值,符合Pandas的官方语法要求:

# 把原来的两行赋值替换为下面的写法
df.loc[:, 'player_1_h2h'] = player_1_h2h
df.loc[:, 'player_2_h2h'] = player_2_h2h
额外优化建议

你当前用循环计算两人历史交手胜负的逻辑,可以用Pandas内置的cumsum方法替代,代码更简洁执行效率也更高,和原有逻辑完全对齐:

# 替换掉原来的for i in range(1,n)的整段循环逻辑
# 逐行判断获胜方是否为p1,累加后偏移一位,保证第一场的历史胜场为0
df['player_1_h2h'] = df['winner'].eq(p1).cumsum().shift(fill_value=0)
df['player_2_h2h'] = df['winner'].eq(p2).cumsum().shift(fill_value=0)

内容的提问来源于stack exchange,提问作者Tim R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:36:00