1 处理 SettingWithCopyWarning 问题
Pandas 中的操作有时会返回数据的视图(View),有时会返回数据的副本(Copy)
在视图上的修改会影响原始数据,而在副本上的修改不会影响原始数据。因此在链式赋值等场景下,pandas可能报出SettingWithCopyWarning
的警告,这类警告通常意味着程序并不知道赋值过程是否成功,因此是值得重视的
SettingWithCopyWarning
的解决方案:
- 更改原始数据时,使用单一赋值操作(loc)
data.loc[data.bidder == 'parakeet2004', 'bidderrate'] = 100
- 需要处理副本时,显式调用copy()创建副本
winners = data.loc[data.bid == data.price].copy()
winners.loc[304, 'bidder'] = 'therealname'
- 直接关闭警告(不推荐)
pd.set_option('mode.chained_assignment', None)
回顾历史来看,这一警告的成因既包括对多种索引的兼容,也有为了继承Numy数组优质特性的妥协。总的来说,SettingWithCopyWarning
的复杂性是 Pandas 库中为数不多的坑。对其中细节感兴趣的可以阅读SettingWithCopyWarning 原理与解决方案(本小节的内容也主要参考自此文章)