解决python_pandas_dataframe中的SettingWithCopyWarning问题。
SettingWithCopyWarning 字面意义是错误的对copy进行了设置。
常见于链式赋值,例如:
dfcd[ 'cdnum'] [dfcd['cdnum'] < 2] = 0
dfcd[ 'cdnum'][dfcd['cdnum'] >= 2] = 1
即,使用 [ ] 进行索引,并进行赋值后,系统无法判别该次赋值是对内容的copy进行赋值,还是对内容的自身进行赋值。
解决办法:
使用 .loc 或者 .iloc 进行行列强制定位,鲜明的告诉系统,这玩意儿就是一个索引,不是copy,不是copy,不是copy。
方案如下:
# 布尔值可以作为行索引依据
dfcd.loc[dfcd['cdnum'] < 2, 'cdnum'] = 0
dfcd.loc[dfcd['cdnum'] >= 2, 'cdnum'] = 1
SettingWithCopyWarning报错消失。
附:
在其他文章中,有通过直接屏蔽错误提示的方法,治标不治本不多赘述。