我从 MySQL 数据库获取数据。获取的数据有一列,其中包含嵌套列表和字典。这个 json 与我的数据库中存储的数据类似:
my_dict = {'id': [1, 2, 3],
'b': [{'100': [{'p': 10, 'max': 20, 'min': 15},
{'p': 20, 'max': 30, 'min': 20}]
},
{'101': [{'p': 100, 'max': 200, 'min': 150}],
'102': [{'p': 105, 'max': 205, 'min': 155},
{'p': 102, 'max': 202, 'min': 152}]},
{'103': [{'p': 210, 'max': 2110, 'min': 1115}]}]}
Run Code Online (Sandbox Code Playgroud)
在代码中,我只有df:
df = pd.DataFrame(my_dict)
df
id b
0 1 {'100': [{'p': 10, 'max': 20, 'min': 15}, {'p': 20, 'max': 30, 'min': 20}]}
1 2 {'101': [{'p': 100, 'max': 200, 'min': 150}], '102': [{'p': 105, 'max': 205, 'min': 155}, {'p': 102, 'max': 202, 'min': 152}]}
2 3 {'103': [{'p': 210, 'max': 2110, 'min': 1115}]}
Run Code Online (Sandbox Code Playgroud)
现在,我想将列展平,b如下所示:
df
id key p max min
0 1 100 10 20 15
1 1 100 20 30 20
2 2 101 100 200 150
3 2 102 105 205 155
4 2 102 102 202 152
5 3 103 210 2120 1115
Run Code Online (Sandbox Code Playgroud)
我读到了关于explode和 的内容pd.json_normalize。但他们没有提供帮助。解决这个问题最有效的方法是什么?
使用嵌套列表理解:
pd.DataFrame([{'id': i, 'key': k, 'p': i, **x}
for i, d in zip(my_dict['id'], my_dict['b'])
for k, l in d.items() for x in l])
Run Code Online (Sandbox Code Playgroud)
输出:
id key p max min
0 1 100 10 20 15
1 1 100 20 30 20
2 2 101 100 200 150
3 2 102 105 205 155
4 2 102 102 202 152
5 3 103 210 2110 1115
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
106 次 |
| 最近记录: |