python pandas dataframe列转换为dict键和值


98

我有一个带有多列的pandas数据框,我想从两列构造一个dict:一个作为dict的键,另一个作为dict的值。我怎样才能做到这一点?

数据框:

           area  count
co tp
DE Lake      10      7
Forest       20      5
FR Lake      30      2
Forest       40      3

我需要将区域定义为键,在dict中计为值。先感谢您。

Answers:


229

如果lakes是您DataFrame,则可以执行以下操作

area_dict = dict(zip(lakes.area, lakes.count))

1
在版本0.17.1中获得错误:TypeError: zip argument #2 must support iteration
jezrael

23
解决方案:area_dict = dict(zip(lakes['area'], lakes['count']))
jezrael

1
在这个问题的其他答案stackoverflow.com/questions/18695605/...
本·富尔顿

1
如果您想将多个列作为字典值怎么办?我在想类似的东西area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column)))。您将如何实现这一目标?
杰西·马克

2
如果第二个参数具有多个值,则将不起作用。
pnv

10

使用大熊猫可以做到:

如果lakes是您的DataFrame:

area_dict = lakes.to_dict('records')

1
在给定的示例中没有“记录”列。同样在这种情况下,索引将成为关键,而不是我们想要的。
Michael D

11
@MichaelD'records'不是一列。这是参数的选项orient
郑刘

这实际上将以以下格式输出词典列表:[{'area':10,'count':7},{'area':20,'count':5} ...]而不是键- >值字典
Roei Bahumi

2

如果您想和熊猫玩耍,也可以这样做。但是,我喜欢punchagan的方式。

# replicating your dataframe
lake = pd.DataFrame({'co tp': ['DE Lake', 'Forest', 'FR Lake', 'Forest'], 
                 'area': [10, 20, 30, 40], 
                 'count': [7, 5, 2, 3]})
lake.set_index('co tp', inplace=True)

# to get key value using pandas
area_dict = lake.set_index('area').T.to_dict('records')[0]
print(area_dict)

output: {10: 7, 20: 5, 30: 2, 40: 3}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.