【问题标题】:df.replace call does not make changes to the original dataframe [duplicate]df.replace 调用不会更改原始数据框 [重复]
【发布时间】:2018-02-09 21:53:24
【问题描述】:

对于pd.DataFrame.replace,我一直在试图弄清楚为什么当我替换另一列中的另一个集合时,我替换的值会恢复到它们的原始值。下面如何使替换永久生效?

titanic.replace({'Pclass' : 
                {3 : 'Lower Class', 
                 2 : 'Middle Class', 
                 1: 'Upper Class'}})

【问题讨论】:

  • 您必须使用 titanic = titanic.replace(.... 或使用参数 inplace = True 来分配结果

标签: python pandas dataframe replace


【解决方案1】:

阅读df.replace 文档:

DataFrame.replace(to_replace=None, value=None, inplace=False, 
                       limit=None, regex=False, method='pad', axis=None)

to_replace 中给出的值替换为value


返回:filledNDFrame

除非您指定,否则这不是就地操作。

titanic.replace({'Survived':(0:'False',1:'True')}, inplace=True)

或者,分配返回值。

titanic = titanic.replace({'Survived':(0:'False',1:'True')})

不要尝试在 inplace=True 时分配,因为那样,df.replace 返回 None

【讨论】:

  • 谢谢。我对编程很陌生,我很难理解文档。不过,您在这里的回答很有帮助。
  • @techscolasticus 如果我的回答有帮助,您可以将其标记为已接受。谢谢。
  • @coldspeed。我尝试将其标记为已接受,但随后它从 Daniel H 的答案中删除了标记,这让我更容易理解为什么我的原始方法不起作用。
  • @techscolasticus 根据this 文件,您只能标记一个答案,因此您应该接受您最喜欢最佳的答案,您觉得它对最有帮助.
【解决方案2】:

就地添加=True

titanic.replace({'Survived':(0:'False',1:'True')},inplace =True)

还有kaggle Titanic数据,推荐map

d={0:'False',1:'True'}

titanic.Survived=titanic.Survived.map(d)

【讨论】:

  • 地图是做什么的?抱歉,我对一般编程非常陌生,并且无法理解 pandas 文档。
  • @techscolasticus 想想 'map' 是 'merge',在你的例子中,如果 map 后值 =0,它将返回 False,就像字典一样,0-->False
【解决方案3】:

代码titanic.replace(...) 创建一个 DataFrame,并返回它。为了让 Python 以后记住这个 DataFrame 而不是仅仅摆脱它,您需要使用 df = titatic.replace(...) 将它分配给某个东西。这里df可以是任意名字,包括titanic;如果您使用相同的名称,它将摆脱 旧的 DataFrame 并从那时起使用新的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    • 1970-01-01
    • 2013-02-08
    • 2016-01-24
    相关资源
    最近更新 更多