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

按Name分组填充Critic Score缺失值时触发SettingWithCopyWarning警告的问题求助

解决Pandas分组填充缺失值时的SettingWithCopyWarning警告

警告产生的原因

这个警告本质上是Pandas在给你提个醒:你正在修改的对象大概率是某个原始DataFrame的视图(切片结果),而非独立的副本。比如你的games或者dupliacted_games,应该是通过类似original_df[original_df['some_col'] == xxx]这种切片操作得到的。Pandas没法确定你到底想修改原始数据,还是只修改这个临时切片出来的对象,所以抛出警告防止你出现意外的数据修改操作。

有效的解决方法

我给你两种思路,优先推荐第一种从根源解决的方案:

方案1:显式创建副本 + 优化填充逻辑

先确保你操作的是独立的DataFrame副本,再调整填充代码的写法,彻底规避视图冲突:

# 第一步:给涉及的DataFrame创建显式副本,切断和原始数据的视图关联
dupliacted_games = dupliacted_games.copy()
games = games.copy()

# 第二步:定义分组填充的逻辑函数
def fill_group_rating(x):
    # 获取分组内的众数,同时处理分组内全为空的情况
    group_mode = x.value_counts().idxmax() if not x.value_counts().empty else mode
    return x.fillna(group_mode)

# 用transform替代apply,更适配这种对齐赋值的场景
games['Rating'] = dupliacted_games.groupby('Name')['Rating'].transform(fill_group_rating)

# 最后填充剩余未覆盖的缺失值
global_rating_mode = dupliacted_games['Rating'].value_counts().idxmax()
games['Rating'] = games['Rating'].fillna(global_rating_mode)

为什么这么改?

  • .copy()会生成一个完全独立的DataFrame,Pandas能明确你是在修改这个副本,不会再触发视图相关的警告。
  • transform方法会返回和原数据长度一致的结果,自动对齐索引,比apply更适合这种需要赋值回原DataFrame的场景,还能减少索引不匹配的风险。

方案2:临时屏蔽警告(不推荐)

如果你只是想临时隐藏警告,不想调整代码逻辑,可以用这个方法,但不建议长期使用——因为它只是掩盖问题,并没有解决视图修改的潜在风险:

import pandas as pd
pd.options.mode.chained_assignment = None  # 关闭链式赋值警告

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 09:32:40