我不确定我的标题是否足够清晰,但我有以下问题:我想使用.map
从我的数据框中的字典创建一个新列。这是按预期工作的,除了一个问题:该函数从字典中提取带有花括号的整个字符串,而不仅仅是值。我广泛搜索,找不到会导致不同结果或这个问题答案的教程。例:
DF:
col1
0 a
1 b
2 c
字典:
{ a : {'value' : 2},
b : {'value' : 4},
c : {'value' : 1}}
现在我想使用.map创建一个新列,其值与col1相对应,如下所示:
col1 col_new
0 a 2
1 b 4
2 c 1
相反,我得到的是:
col1 col_new
0 a {'value' : 2}
1 b {'value' : 4}
2 c {'value' : 1}
这是我使用的.map命令:
df["new_col"] = df.col1.map(dict)
我尝试使用to_numeric
,但这没有任何影响,我猜它与数字/字符串类型的数据没有任何关系。
任何帮助都会受到赞赏,作为一个刚刚开始使用Python的自学数据分析师,我仍然无法在文档中找到答案。
发生的事情是你的字典值本身就是字典。
所以pd.Series.map
只会映射到字典值。它无能为力。有一些解决方法。
这将提取每个字典中“值”键的值。
from operator import itemgetter
df['new_col'] = df['col1'].map(d).apply(itemgetter('value'))
在映射系列之前,使用键映射构建一个新的字典。
d = {k: v['value'] for k, v in d.items()}
df['new_col'] = df['col1'].map(d)
除非你打算在dict
之前重建你的.map()
,否则下面的方法是合适的。
df['new_col'] = df['col1'].apply(lambda x: dict_[x]['value'])
输出:
col1 new_col
0 a 2
1 b 4
2 c 1
字典中的值设置为dataframe列
dic = { 'a' : 2, 'b' : 4, 'c' : 1}
df["new_col"] = df.col1.map(dict)
这应该工作正常。