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

为何使用.loc仍触发pandas的SettingWithCopyWarning?

为什么用了.loc[,]仍触发SettingWithCopyWarning?

问题根源

你写的sub_df = df.loc[df.A > 1]这一步,虽然用了.loc,但返回的sub_df可能是原DataFrame的视图(而非独立副本)。pandas无法明确判定这个切片到底是视图还是副本,当你后续通过sub_df.loc[:, 'C']修改列时,它会触发警告——因为担心你是在无意中修改原数据的视图,而非独立的子数据集。

解决方法

方法1:显式创建副本

在赋值sub_df时加上.copy(),直接生成独立的DataFrame,彻底切断和原数据的关联:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
sub_df = df.loc[df.A > 1].copy()  # 显式创建副本
sub_df.loc[:, 'C'] = sub_df.A + sub_df.B

方法2:直接在原DataFrame上链式修改

跳过中间变量sub_df,直接在原DataFrame上完成列的赋值操作:

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df.loc[df.A > 1, 'C'] = df.loc[df.A > 1, 'A'] + df.loc[df.A > 1, 'B']

补充说明

pandas的切片返回视图还是副本,取决于底层数据的存储布局和切片逻辑,有时候即使使用.loc也无法确保返回独立副本。显式调用.copy()是最稳妥的消除这类警告的方式,能明确告诉pandas你要操作的是一个全新的数据集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:03:11