将 pandas 转换为定义用于键值的列的字典

Posted

技术标签:

【中文标题】将 pandas 转换为定义用于键值的列的字典【英文标题】:Convert pandas to dictionary defining the columns used fo the key values 【发布时间】:2017-04-28 13:04:30 【问题描述】:

有熊猫数据框“test_df”。我的目标是将其转换为字典。因此我运行这个:

   id   Name   Gender  Age  
0  1  'Peter'   'M'     32    
1  2  'Lara'    'F'     45   

因此我运行这个:

test_dict = test_df.set_index('id').T.to_dict()

输出是这样的:

1: 'Name': 'Peter', 'Gender': 'M', 'Age': 32, 2: 'Name': 'Lara', 'Gender': 'F', 'Age': 45

现在,我只想选择“姓名”和“性别”列作为字典键的值。我正在尝试将上面的脚本修改成这样:

test_dict = test_df.set_index('id')['Name']['Gender'].T.to_dict()

没有成功!

有什么建议吗?!

【问题讨论】:

【参考方案1】:

你非常接近,使用subset[['Name','Gender']]

test_dict = test_df.set_index('id')[['Name','Gender']].T.to_dict()
print (test_dict)
1: 'Name': 'Peter', 'Gender': 'M', 2: 'Name': 'Lara', 'Gender': 'F'

另外T不是必须的,使用参数orient='index'

test_dict = test_df.set_index('id')[['Name','Gender']].to_dict(orient='index')
print (test_dict)
1: 'Name': 'Peter', 'Gender': 'M', 2: 'Name': 'Lara', 'Gender': 'F'

【讨论】:

正确答案!非常感谢! 感谢您的评论。如果我的回答有帮助,请不要忘记accept。谢谢。 这对我有用:node_df.set_index('kegg_cid')[['name', 'wt', 'vis']].T.to_dict('dict')。这给了我一个字典形式为 'c00022': 'name': 'pyruvate', 'vis': 1, 'wt': 1, 'c00024': 'name': 'acetyl-CoA ', 'vis': 1, 'wt': 1, ...,其中第一列给出了键。 ' - 引用的字符串都是 df 列,所以我需要转置数据帧(参见***.com/a/56607013/1904943);我的数据框中还有其他列('node',...),我忽略了(或者,您可以对列进行切片以仅使用所需数据导出 df)。

以上是关于将 pandas 转换为定义用于键值的列的字典的主要内容,如果未能解决你的问题,请参考以下文章

Python将列表转换为具有多个键值的字典[关闭]

映射两个数据框以创建一个包含多个键值的字典 - Pandas

如何将 Pandas 系列中的多个字典键转换为 DataFrame 中的列?

用字典键值(pyspark)替换火花df中一列的值

将列表转换为字典,然后通过键值将多个字典合并为一个字典

将标准 python 键值字典列表转换为 pyspark 数据框