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

DataFrame过滤赋值列遇SettingWithCopyWarning及X_test未更新求助

解决Pandas的SettingWithCopyWarning问题及字段未更新问题

你碰到的这个警告和字段没更新的问题,本质是链式索引导致的副本/视图混淆。Pandas没法确定你连续两次索引操作后,到底是在修改原DataFrame还是它的临时副本,所以既给了你警告,你的赋值操作也没作用到原数据上。

先说说你两种写法的问题:

  • 第一种X_test[X_test['country']=='US'].loc[:,'country_US']=1:先通过X_test[X_test['country']=='US']切片得到的可能是原数据的副本,后续用loc赋值只是修改了这个临时副本,原X_test自然没变化。
  • 第二种X_test.loc[X_test['country']=='US'].loc[:,'country_US']=1:哪怕用了loc,连续两次链式调用loc还是会触发同样的问题,第一次loc返回的结果依然可能是副本,赋值操作没传递到原数据。

正确的写法(一次定位完成赋值)

直接用单次loc同时定位行和列,这是Pandas官方推荐的避免链式索引问题的方式,既能正确修改原数据,也不会触发警告:

X_test.loc[X_test['country'] == 'US', 'country_US'] = 1

补充:如果country_US列还未创建

要是你的X_test里还没有country_US这个字段,记得先初始化列(比如默认设为0),再赋值:

# 先创建列,默认值为0
X_test['country_US'] = 0
# 给符合条件的行赋值1
X_test.loc[X_test['country'] == 'US', 'country_US'] = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 15:17:29