Pandas的SettingWithCopyWarning

原因:当你用不恰当的方式对pandas的df(data frame)进行赋值时 , 可能会报出的一个警告 。
例子:有时候你想对df进行赋值从而对其内容进行修改 , 可能会用修改列表的写法对其进行修改 , 如
pd['a'][0] = 1意思是将列a的第一个元素修改为1 。 这样写能达到你的目的 , 但官方解释说这种写法大多数时候会奏效 , 但是不推荐 。 推荐的完全正确的写法是
pd.loc[0, 'a'] = 1为什么会报出警告呢?原因是有些不恰当的写法可能达不到赋值的效果 。 官方给出的一个例子如下
df = pd.DataFrame({'a': ['one', 'one', 'two', 'three', 'two', 'one', 'six'], 'c': np.arange(7)})df[df['a'].str.startswith('o')]['c'] = 42第二行的赋值就会导致错误 。 因为等号的左边其实是原df相应位置的一个copy , 对copy进行赋值显然不会对原来的df进行修改 , 从而导致错误 。
正确的做法还是利用loc来获取真实的原df的对应位置 , 然后去赋值 , 写法为
mask = df['a'].str.startswith('o')df.loc[mask, 'c'] = 42【Pandas的SettingWithCopyWarning】官网的对SettingWithCopyWarning的介绍可以在网页里 , 搜索SettingWithCopyWarning查看 。


    推荐阅读