如何在设置新列时不获取SettingWithCopyWarning



我在使用SettingWithCopyWarning时遇到了一个烦人的问题,而且我似乎没有消除这个警告。我有一个df用户喜欢这个

user id     cloud_files 
1              0
2              8
3              1

我想添加一个云用户的布尔列

user id     cloud_files     cloud_user  
1              0           false
2              8           true  
3              1           true  

我试过这样做,但我一直得到SettingWithCopyWarning。

users['cloud_user'] = np.where(users['cloud_files']== 0, True, False)
users['cloud_user'] = users['cloud_files']!= 0
users.loc[:,'cloud_user'] = users['cloud_files']!= 0

我尝试过复制和重置索引,但我就是无法摆脱警告。有没有办法在不收到警告的情况下做到这一点,或者我只需要取消警告?

您可以使用布尔值的属性来直接创建新列,因为只要num为非零,bool(num)就会计算为True

df['cloud_user'] = df['cloud_files'].astype(bool)

结果:

>>> df = pd.DataFrame({'user_id':[1,2,3],'cloud_files':[0,8,1]})
>>> df['cloud_user'] = df['cloud_files'].astype(bool)
>>> df
user_id  cloud_files  cloud_user
0        1            0       False
1        2            8        True
2        3            1        True

最新更新