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查看 。
推荐阅读
- 不常见的Pandas小窍门:我打赌一定有你不知道的
- Pandas的crosstab函数
- Python中文速查表-Pandas 基础
- Pandas教程
- Python数据处理,pandas 统计连续停车时长