我有一个数据框为
> 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
如何将字典值映射到数据框活动列中的缺失值?
答案 0 :(得分:2)
使用apply
和str.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(';'))))))))