pandas进阶技巧

1 处理 SettingWithCopyWarning 问题

Pandas 中的操作有时会返回数据的视图(View),有时会返回数据的副本(Copy)

在视图上的修改会影响原始数据,而在副本上的修改不会影响原始数据。因此在链式赋值等场景下,pandas可能报出SettingWithCopyWarning的警告,这类警告通常意味着程序并不知道赋值过程是否成功,因此是值得重视的

SettingWithCopyWarning的解决方案:

  1. 更改原始数据时,使用单一赋值操作(loc)
data.loc[data.bidder == 'parakeet2004', 'bidderrate'] = 100
  1. 需要处理副本时,显式调用copy()创建副本
winners = data.loc[data.bid == data.price].copy()  
winners.loc[304, 'bidder'] = 'therealname'
  1. 直接关闭警告(不推荐)
pd.set_option('mode.chained_assignment', None)

回顾历史来看,这一警告的成因既包括对多种索引的兼容,也有为了继承Numy数组优质特性的妥协。总的来说,SettingWithCopyWarning 的复杂性是 Pandas 库中为数不多的坑。对其中细节感兴趣的可以阅读SettingWithCopyWarning 原理与解决方案(本小节的内容也主要参考自此文章)

往年同期文章