我想要抓取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而不是系列),但不是能够弄清楚如何解决这个问题。我不想禁用警告,因为我有代码,我不想在无意中犯这种错误。
答案 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