python pandas数据框列转换为dict键和值

Posted

技术标签:

【中文标题】python pandas数据框列转换为dict键和值【英文标题】:python pandas dataframe columns convert to dict key and value 【发布时间】:2013-08-03 11:09:43 【问题描述】:

我有一个包含多列的 pandas 数据框,我想从两列构造一个 dict:一列作为 dict 的键,另一列作为 dict 的值。我该怎么做?

数据框:

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

我需要将 area 定义为 key,count 为 dict 中的 value。提前谢谢你。

【问题讨论】:

【参考方案1】:

如果lakes 是你的DataFrame,你可以这样做

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

【讨论】:

在 0.17.1 版本中出现错误:TypeError: zip argument #2 must support iteration 解决方案:area_dict = dict(zip(lakes['area'], lakes['count'])) 这个问题的其他答案***.com/questions/18695605/… 如果您希望字典值中有多个列怎么办?我在想area_dict = dict(zip(lakes.area, (lakes.count, lakes.other_column)))之类的东西。您将如何做到这一点? 如果第二个参数有多个值,这将不起作用。【参考方案2】:

使用 pandas 可以做到:

如果 Lakes 是您的 DataFrame:

area_dict = lakes.to_dict('records')

【讨论】:

给定示例中没有“记录”列。同样在这种情况下,索引将是关键,这不是我们想要的。 @MichaelD 'records' 不是一列。这是参数orient 的一个选项。 这实际上会输出以下格式的字典列表:['area': 10, 'count': 7, 'area': 20, 'count': 5。 ..] 而不是 key->value 字典。【参考方案3】:

如果你想和熊猫一起玩,你也可以这样做。不过,我喜欢潘根根的方式。

# 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

【讨论】:

【参考方案4】:

如果 'lakes' 是您的 DataFrame,您可以执行以下操作:

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

我的解决方案:

area_dict = lakes.set_index("area")["count"].to_dict()

或@punchagan 的解决方案(我更喜欢)

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

两者都应该工作。

【讨论】:

【参考方案5】:

回答@Jessie Marks 的问题,关于如何使用这种 dict(zip(***)) 方法,如果你想使用多列作为键/值,答案是压缩拉链;例如:

dict(zip(df['key'], zip(df["value col 1"], df_['value col 1'])))

或者如果您希望使用多列作为键:

dict(zip(zip(df['key 1'], df['key 2']), zip(df["value col 1"], df_['value col 1'])))

这在 pandas v1.1.5 上对我有用;蟒蛇3.6.13

PS。抱歉,我没有在@Jessie Marks 问题下直接回复,它的新帐户,我还不能这样做。

【讨论】:

以上是关于python pandas数据框列转换为dict键和值的主要内容,如果未能解决你的问题,请参考以下文章

来自 pandas 数据框列的 dict

如何解压缩数据框列中存在的 json 的键,值将转换为键作为列,而使用 python 将其值转换为列?

将 pandas 数据框列标签从浮点数转换为整数

将所有数据框列转换为浮动的最快方法 - pandas astype 慢

如何使用 Plotly 在 Python 中使用 Pandas 数据框列设置散点图悬停信息

将 pandas 数据框列从十六进制字符串转换为 int