【问题标题】:Remap values in pandas using a dict produces one column series instead of the full DataFrame使用 dict 重新映射 pandas 中的值会产生一个列系列而不是完整的 DataFrame
【发布时间】:2019-09-15 13:20:43
【问题描述】:

根据这个thread,我们可以使用mapreplace 使用定义的字典重新映射Dataframe 的值。我已经尝试过了,它确实正确地重新映射了这些值,但是输出结果只生成了我在(类型系列)上执行操作的列,而不是完整的 Dataframe。

如何在新的data3 中执行映射但保留其他列(带有“last”)?

data3 = data['last'].map(my_dict)

【问题讨论】:

    标签: python pandas dataframe dictionary


    【解决方案1】:

    我认为你想要做的是:

    data['last'] = data['last'].map(my_dict)
    

    根据与链接相关的评论进行更新:

    In [1]: di = {1: "A", 2: "B"}
    
    In [5]: from numpy import NaN
    
    In [6]: df = DataFrame({'col1':['w', 1, 2], 'col2': ['a', 2, NaN]})
    
    In [7]: df
    Out[7]:
      col1 col2
    0    w    a
    1    1    2
    2    2  NaN
    
    In [8]: df['col1'].map(di)
    Out[8]:
    0    NaN
    1      A
    2      B
    Name: col1, dtype: object
    
    In [9]: df
    Out[9]:
      col1 col2
    0    w    a
    1    1    2
    2    2  NaN
    
    In [10]: df['col1'] = df['col1'].map(di)
    
    In [11]: df
    Out[11]:
      col1 col2
    0  NaN    a
    1    A    2
    2    B  NaN
    

    如果您希望在 data3 而不是 data 中发生这种情况,那么您可以将地图的 Series 结果分配给 data3 中的列。

    【讨论】:

    • 感谢您的回答。我认为这种语法不正确,因为它产生了错误。此外,我正在尝试保留原始数据并继续使用 data3。我们在我提供的链接中看到的那种。
    • 嗯.. 它对我有用。也许我不明白这个问题。我根据我的理解更新了答案,但也许这不是你想要的。也许您可以更具体一些并包含 DataFrame?
    • 是的,它有效。但是,在这个线程中,我通过调用 map 来链接它,而无需明确定义要在数据上使用哪一列,也不需要进行任何分配。我认为它只适用于旧版本。我想我会复制变量并遵循您的方法。
    猜你喜欢
    • 2013-12-13
    • 2016-06-08
    • 1970-01-01
    • 2017-08-12
    • 1970-01-01
    相关资源
    最近更新 更多