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

Pandas报错:尝试在DataFrame切片副本上赋值的问题求助

解决Pandas的SettingWithCopyWarning问题

嘿,这个警告我太熟了!Pandas的SettingWithCopyWarning经常在你切片后直接修改DataFrame时跳出来,本质是它拿不准你操作的是原DataFrame的视图(只是原数据的一个“窗口”)还是副本(独立的新数据),怕你不小心误改数据或者修改没生效。

给你两种简单靠谱的解决办法:

方法1:显式创建副本再修改

在筛选NBA数据的时候,直接用.copy()告诉Pandas生成一个独立的副本,之后怎么修改都不会触发警告:

import pandas as pd

df_play = pd.read_csv("players_stats_by_season_full_details.csv")
# 显式复制筛选后的结果,生成独立副本
VC = df_play[df_play["League"] == "NBA"].copy()
# 放心新增计算列
VC["FT_Miss"] = VC['FTA'] - VC['FTM']

方法2:用.loc直接在原DataFrame上操作

如果你不需要保留原DataFrame的“纯净”,可以直接用.loc链式操作,精准定位到NBA的行并新增列,从根源上避免视图/副本的模糊性:

import pandas as pd

df_play = pd.read_csv("players_stats_by_season_full_details.csv")
# 直接在原DataFrame的指定行新增计算列
df_play.loc[df_play["League"] == "NBA", "FT_Miss"] = df_play['FTA'] - df_play['FTM']
# 之后如果需要单独提取NBA数据,再进行筛选
VC = df_play[df_play["League"] == "NBA"]

为啥原来的代码会触发警告?

当你执行VC = df_play[df_play["League"] == "NBA"]时,Pandas返回的对象可能是原数据的视图,也可能是副本——它自己没法100%确定。这时候你直接给VC新增列,Pandas就会警告你:万一这是视图,你修改的其实是原数据?万一副本,那你的修改不会同步到原数据?所以它强制要求你用.loc或者显式复制来明确你的操作意图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:58:11