处理Kaggle泰坦尼克数据时,Pandas设置部分数据触发SettingWithCopyWarning求助
解决泰坦尼克数据集修改Survived字段时的SettingWithCopyWarning警告
嘿,我太懂你遇到这个警告的烦躁了——明明跟着推荐用了loc方法,怎么还是跳出SettingWithCopyWarning?别慌,我来给你掰扯清楚原因和解决办法。
问题到底出在哪?
你写的y = train[["Survived"]]这行代码,并没有生成一个全新的独立DataFrame,它只是原train数据集的一个视图。简单说就是,y和train底层共享着同一份数据。当你用loc修改y的时候,Pandas会犯嘀咕:你到底是只想改这个临时视图,还是不小心想间接修改原train数据?为了防止你误操作污染原始数据集,它就抛出了这个警告提醒你。
一招解决:创建独立副本
核心思路就是让y成为完全独立的DataFrame,和原train彻底分家。只需要在创建y的时候加上.copy()方法就行:
import pandas as pd train = pd.read_csv('data/train.csv') # 加上.copy()生成独立副本,彻底和原数据解绑 y = train[["Survived"]].copy() # 现在再用loc修改就不会有警告了 y.loc[y["Survived"] == 0, "Survived"] = -1
额外小技巧:直接修改原数据
如果你本来就想直接修改原train里的Survived字段,那也可以跳过创建y这一步,直接在原数据集上操作:
train.loc[train["Survived"] == 0, "Survived"] = -1
这样操作目标明确,Pandas自然不会再抛出警告。
内容的提问来源于stack exchange,提问作者sappy
相关产品推荐
相关产品推荐

