无法解决Pandas Series SettingWithCopyWarning

时间:2017-12-01 15:56:58

标签: python pandas chained-assignment

我想要抓取Series并对其进行更改,我稍后会在DataFrame中反映出来。但是,如果没有SettingWithCopyWarning,我无法理解如何做到这一点。这是误报还是我做错了什么?

df = pd.DataFrame([[1,2,3],[4,5,6]], columns=list('abc'))
df['d'] = df['a'].diff()
d = df.loc[:, 'd']
d.loc[d>0] *= 3

我已经阅读了文档(,我在询问之前读过this question但它只处理DataFrame而不是系列),但不是能够弄清楚如何解决这个问题。我不想禁用警告,因为我有代码,我不想在无意中犯这种错误。

1 个答案:

答案 0 :(得分:2)

  

我想获取一个系列并对其进行更改,这是我想要的   稍后会反映在DataFrame中。

在这种情况下,您应该暂时禁用此警告并按原样继续操作。使用.copy()将意味着您df的更改将不会被d更改。

with pd.option_context('mode.chained_assignment', None):
    df = pd.DataFrame([[1,2,3],[4,5,6]], columns=list('abc'))
    df['d'] = df['a'].diff()
    d = df.loc[:, 'd']
    d.loc[d>0] *= 3

# Code you run outside of `with` will maintain your original setting:
# pd.get_option('chained_assignment')

option_context是一个上下文管理器,意味着它可以与with一起使用,该选项仅适用于块中的代码。

了解更多:pandas> Getting & Setting Options