【问题标题】:mapping missing values in one column of pandas dataframe using dictionary with reference to another column values使用字典参考另一列值映射熊猫数据框中的一列中的缺失值
【发布时间】:2019-04-02 04:09:03
【问题描述】:

我有一个数据框

> print(df)
[Out:]
activity-code    activity
-------------------------
0                unknown
99               NaN
84               sports
72;99            NaN
57               recreational
57;99;11         NaN
11               NaN

还有一个以活动代码为键的字典,

> print(act_dict)
[Out:]
{10: 'unknown',
11: 'cultural',
57: 'recreational',
72: 'social service',
84: 'sports',
99: 'education'}

数据框内的所有值都存储为字符串,即使活动代码的值也是字符串。而字典键是整数类型 我想参考存储在活动代码列中的值,使用字典以某种方式映射和替换活动中的缺失值。 所以想要的输出数据框应该是这样的,

> print(df)
[Out:]
activity-code    activity
-------------------------
0                unknown
99               education
84               sports
72;99            social service;education
57               recreational
57;99;11         recreational;education;cultural
11               cultural

这是我迄今为止尝试过的,

df['new-activity'] = df['activity-code'].str.split(';').apply(lambda x: ';'.join([act_dict[int(i)] for i in x]))

但是对于活动代码不是单个代码值的单个值,我会收到 KeyError。错误说KeyError: 0

如何将字典值映射到数据框活动列中的缺失值?

【问题讨论】:

    标签: python python-3.x pandas dictionary


    【解决方案1】:

    使用applystr.split,而不是apply,使用列表推导式并通过';' 加入:

    df['activity'] = df['activity-code'].str.split(';').apply(lambda x: ';'.join([act_dict[int(i)] for i in x]))
    

    现在:

    print(df)
    

    输出:

      activity-code                         activity
    0             0                          unknown
    1            99                        education
    2            84                           sports
    3         72;99         social service;education
    4            57                     recreational
    5      57;99;11  recreational;education;cultural
    6            11                         cultural
    

    【讨论】:

    • 嗨@U9-Forward 请查看有问题的描述,我已经尝试过这种方法.....对于只有一个活动代码的记录,我收到了 KeyError .....这个代码行适用于同一记录中有多个活动代码的记录,但不适用于只有单个活动代码的地方
    • 我刚刚重新检查了一下,可能是因为字典中没有 '0' 的键值对。对不起,这是我的错误,我从未验证过字典中的键。但是谢谢....当你说它对你有用的那一刻,我只是交叉检查并发现我没有任何密钥为零。感谢您的帮助:)
    【解决方案2】:

    如果您的字典中没有针对 0 的值,您可以使用 filter():

    df['activity']= df['activity-code'].apply(lambda x:'; '.join(list(filter(None,map(act_dict.get,list(map(int,x.split(';'))))))))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多