使用字典并参考另一列值来映射熊猫数据框的一列中的缺失值

时间:2019-04-02 04:09:03

标签: python python-3.x pandas dictionary

我有一个数据框为

> 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

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

2 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:0)

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

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