在Pandas中使用.map从字典创建列时,省略大括号

问题描述 投票:1回答:3

我不确定我的标题是否足够清晰,但我有以下问题:我想使用.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的自学数据分析师,我仍然无法在文档中找到答案。

python pandas dictionary dataframe
3个回答
1
投票

发生的事情是你的字典值本身就是字典。

所以pd.Series.map只会映射到字典值。它无能为力。有一些解决方法。

Use itemgetter to extract values

这将提取每个字典中“值”键的值。

from operator import itemgetter

df['new_col'] = df['col1'].map(d).apply(itemgetter('value'))

Restructure your dictionary before mapping

在映射系列之前,使用键映射构建一个新的字典。

d = {k: v['value'] for k, v in d.items()}
df['new_col'] = df['col1'].map(d)

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

0
投票

字典中的值设置为dataframe列

dic = { 'a' : 2, 'b' : 4, 'c' : 1}
df["new_col"] = df.col1.map(dict)

这应该工作正常。

© www.soinside.com 2019 - 2024. All rights reserved.