python - 将具有可变长度的字典列表的字典转换为熊猫数据框
问题描述
我有一个字典,其中包含一个字典列表作为值,这些列表的长度是可变的。我已经尝试了很多,但无法将数据正确转换为 Pandas 数据框。
数据如下所示:
{key1: [{'column5': 40, 'column1': 1, 'column2': 6, 'column3': 170, 'column4': 300}],
key2: [{'column5': 6, 'column1': 33, 'column2': 5, 'column3': 76, 'column4': 13}],
key3: [{'column5': 7, 'column1': 44, 'column2': 2, 'column3': 67, 'column4': 13}, {'column5': 45, 'column1': 400, 'column2': 100, 'column3': 12, 'column4': 145}]}
我想得到这样的框架:
column1 column2 column3 ..
key1 1 6 170
key2 33 5 76
key3 33 2 67
key3 400 100 12
.
.
在使用 pd.DataFrame.from_records 和使用 orient=index 时,我要么得到像“数组必须都具有相同长度”这样的错误,而且在使用 orient=index 时,数据仍然作为放置在数据框中的字典。我尝试过的一些事情:
df = pd.DataFrame.from_dict(a, orient='index')
df.transpose() //Data is not properly placed in the dataframe
df = pd.DataFrame.from_records(dataset, orient='index') //Data is not properly placed in the dataframe
df = pd.DataFrame.from_records(dataset) //Gives error about length of arrays
df = pd.DataFrame.from_dict(dataset).T //Gives error about length of arrays
我该怎么办?非常感谢!
解决方案
设置
dct = {'key1': [{'column5': 40, 'column1': 1, 'column2': 6, 'column3': 170, 'column4': 300}],'key2': [{'column5': 6, 'column1': 33, 'column2': 5, 'column3': 76, 'column4': 13}],'key3': [{'column5': 7, 'column1': 44, 'column2': 2, 'column3': 67, 'column4': 13}, {'column5': 45, 'column1': 400, 'column2': 100, 'column3': 12, 'column4': 145}]}
使用列表推导稍微重构您的输入数据集:
pd.DataFrame([{'key': k, **i} for k, v in dct.items() for i in v])
column1 column2 column3 column4 column5 key
0 1 6 170 300 40 key1
1 33 5 76 13 6 key2
2 44 2 67 13 7 key3
3 400 100 12 145 45 key3
为了帮助更好地理解为什么会这样,这里是列表理解创建的字典列表:
[{'key': 'key1', 'column5': 40, 'column1': 1, 'column2': 6, 'column3': 170, 'column4': 300}, {'key': 'key2', 'column5': 6, 'column1': 33, 'column2': 5, 'column3': 76, 'column4': 13}, {'key': 'key3', 'column5': 7, 'column1': 44, 'column2': 2, 'column3': 67, 'column4': 13}, {'key': 'key3', 'column5': 45, 'column1': 400, 'column2': 100, 'column3': 12, 'column4': 145}]
推荐阅读
- javascript - 当 Key 是对象时如何使用 Map?
- bash - Git Bash / MinGW中的自定义选项卡完成?
- python - 我可以将安装在适用于 Linux 的 Windows 子系统上的 Redis 与 Windows 中的 python 应用程序一起使用吗?
- angular - 如何使用异步管道显示列表
- java - 拆分此字符串以获得对应字符的最大计数
- git - 如何自动化数十个 Git 提交的重新措辞?
- selenium - Selenium Apache POI - 从 Excel 读取数据并在测试脚本中使用该数据的最佳方法是什么
- r - 伯努利散文的模拟
- laravel - 处理共享文件,例如 3 个不同 laravel 项目之间的迁移
- javascript - 如何在 Google App Script 中导入 RSSfeed