0

我想获取 aSeries并对其进行更改,我想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

我已经阅读了文档(的,我在询问之前确实阅读了这个问题,但它只处理 DataFrames 而不是系列),但无法解决这个问题。我不想禁用警告,因为我有代码不想在不经意间犯这种错误。

4

1 回答 1

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 >获取和设置选项

于 2017-12-01T16:09:13.493 回答