代码之家  ›  专栏  ›  技术社区  ›  Jonas Byström

无法使用CopyWarning绕过熊猫系列设置

  •  0
  • Jonas Byström  · 技术社区  · 8 年前

    我想去拿一个 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 但它只处理数据帧,不处理序列),但无法解决如何修复此问题。我宁愿不禁用警告,因为我有代码,我不想无意中犯这种类型的错误。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Brad Solomon    8 年前

    我想取一个系列并对其进行更改,我希望 反映在稍后的数据帧中。

    在这种情况下,您应该暂时禁用此警告并按现在的方式继续。使用 .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 ,并且该选项仅适用于块内的代码。

    阅读更多:熊猫> Getting & Setting Options