如何使用.loc解决pandas的SettingWithCopyWarning警告?
警告含义解释
这个警告的核心触发原因是你当前操作的df并非根DataFrame,而是之前从其他DataFrame中取切片生成的对象,pandas无法确认这个切片对象是原始数据的视图还是独立副本,也不确定你是要修改当前切片还是同步修改原始DataFrame,因此抛出提示避免你出现预期外的逻辑错误。numpy中不会触发同类提示,是因为numpy没有针对数组切片做视图/副本的修改风险自动校验机制。
消除警告的方案
根据你的实际使用需求选对应方案即可:
- 如果你仅需要操作当前这个切片
df,不需要把修改同步到原始的大DataFrame:
生成切片的时候主动调用copy()声明创建独立副本即可,比如你之前生成df的代码如果是df = raw_df[["Close", "Open"]],修改为df = raw_df[["Close", "Open"]].copy(),之后你原来的赋值代码df["Target"] = (df["Close"] - df["Open"])/df["Open"]就可以正常运行不会触发警告。 - 如果你需要把新增的
Target列同步到原始的大DataFrame:
直接用loc操作原始DataFrame即可,代码如下:
如果你不想修改之前生成切片的逻辑,也可以直接修改当前的赋值语句为raw_df.loc[:, "Target"] = (raw_df["Close"] - raw_df["Open"]) / raw_df["Open"]loc写法,也能避免警告:df.loc[:, "Target"] = (df["Close"] - df["Open"]) / df["Open"]
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

