我不确定我的标题是否足够清晰,但我有以下问题:我想使用.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的自学成才的数据分析师,我仍然无法在文档中找到答案。
答案 0 :(得分:2)
除非您打算在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
答案 1 :(得分:1)
你的字典值本身就是字典。
因此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)
答案 2 :(得分:0)
字典中的值设置为dataframe
列User Time
a 2016-05-02 03:45:11
b 2016-05-05 04:05:24
b 2016-06-05 07:23:16
c 2016-05-08 08:37:37
d 2016-05-09 11:28:15
c 2016-08-11 23:41:18
c 2016-05-11 03:51:14
b 2016-05-11 06:16:21
b 2016-07-15 20:23:35
a 2016-05-16 06:42:53
a 2016-05-17 08:52:24
a 2016-05-18 09:35:47
a 2016-05-19 03:24:39
d 2016-07-12 06:39:26
. .
. .
. .
这应该可以正常工作。