Python:如何从熊猫系列的字典中获取值

Posted

技术标签:

【中文标题】Python:如何从熊猫系列的字典中获取值【英文标题】:Python: how to get values from a dictionary from pandas series 【发布时间】:2015-07-30 12:14:54 【问题描述】:

我对 python 非常陌生,并试图从字典中获取值,其中键定义在数据框列 (pandas) 中。我搜索了很多,最接近的是 下面链接中的问题,但它没有答案。

所以,我在这里试图找到相同类型问题的答案。

Select from dictionary using pandas series

我有一本字典

type_dict = 3: 'foo', 4:'bar',5:'foobar', 6:'foobarbar'

以及具有以下列的数据框:

>>> df.type
0     3
1     4
2     5
3     6
4     3
5     4
6     5
7     6
8     3

我想创建一个包含相应 type_dict 值的新列,但以下是我唯一能想到但没有工作的内容:

type_dict[df.type]

TypeError: 'Series' 对象是可变的,因此它们不能被散列

type_dict[df.type.values]

TypeError: unhashable type: 'numpy.ndarray'

更新问题:

对于 pandas DataFrame,比如“df”,我如何以类型作为标记字典的键在米上绘制速度。

mkr_dict = 'gps': 'x', 'phone': '+', 'car': 'o'

x = 'speed': [10, 15, 20, 18, 19], 'meters' : [122, 150, 190, 230, 300], 'type': ['phone', 'phone', 'gps', 'gps', 'car']

df = pd.DataFrame(x)
   meters  speed   type
0     122     10  phone
1     150     15  phone
2     190     20    gps
3     230     18    gps
4     300     19    car

plt.scatter(df.meters, df.Speed, marker = df.type.map(mkr_dict)) 

散点图对我不起作用...

【问题讨论】:

AFAIK,普通 python 没有“数据帧”的概念。如果您使用的是框架或库(如 pandas),请指明是哪一个。 我认为您的 scatter 问题应该是一个新问题,我不是 matplotlib 专家,但我认为您可以使用此处的答案来实现它:***.com/questions/26490817/… 基本上这会遍历每一行调用 scatter 和传递 x,y 坐标和标记样式 【参考方案1】:

将字典作为参数传递给map

In [79]:

df['type'].map(type_dict)
Out[79]:
0          foo
1          bar
2       foobar
3    foobarbar
4          foo
5          bar
6       foobar
7    foobarbar
8          foo
Name: type, dtype: object

这将在字典中查找键值并从字典中返回相关值。

【讨论】:

谢谢!!!!!!所以它确实从字典中创建了一个值列表。但我试图将其用作散点图中的标记,但它失败并出现错误:TypeError: 'Series' objects are mutable, 因此它们不能被散列 plt.scatter(output.x, output.y, s=area, ,标记 = output.DataPointType.map(mkr_dict)) 。有什么想法吗? 您必须解释如何传递这些值,但列表和系列是可变的,通常尽管这些绘图库中的大多数都与可迭代容器(如 numpy 数组)接口,并且应该与熊猫数据框兼容 我更新了我的问题,你能再看看吗?谢谢!【参考方案2】:

在熊猫中,这应该可以工作

df['val'] = df.apply(lambda x: type_dict[x['type']], axis=1)

【讨论】:

以上是关于Python:如何从熊猫系列的字典中获取值的主要内容,如果未能解决你的问题,请参考以下文章

如何根据字典替换熊猫系列中的字符串组,并将值作为列表?

从两个熊猫系列(csv的列作为DataFrame)创建元素字典

如何从熊猫系列中获取包含行索引的列表[重复]

Python中字典和熊猫系列的区别

从嵌套字典列表中获取熊猫数据框

来自数据框的嵌套字典,内部字典包含熊猫系列作为值