Pandas中SettingWithCopyWarning是如何产生并解决的?
两个主要原因
SettingWithCopyWarning
通常在用户使用副本时产生,具体会发生在以下两种情况:
链式赋值(Chained assignment)
如df[a:b][c:d] = x
,该操作包含两次链式操作,第一次会生产新的dataframe
,第二次的赋值刷在该新的df
上进行。
解决方案是使用loc
,即df.loc[a:b,c:d] = x
蔽链(Hidden chaining)
如下面的代码,df2
是由df
经过get
操作得来的,前者可能是后者的副本,也有可能不是。当修改df2
的时候,有可能修改了df
,所以也会出现Warning.1
2df2 = df.loc[df.a==df.b]
df2.loc[c,d] = x解决方案是明确说明
df2
是df
的副本,即:1
df2 = df.loc[df.a==df.b].copy()
如果你很清楚以上原因,可以直接关闭警告: pd.set_option('mode.chained_assignment', None)
Reference
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Jeromy's Blog!
评论