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!
评论





