将字典的字典转换为以熊猫为单位的行数据框

问题描述

我有如下所示的字典

d1:

@H_502_4@{'teachers': 49,'students': 289,'R': 3.7,'holidays': 165,'E': {'from': '2020-02-29T20:00:00.000Z','to': '2020-03-20T20:00:00.000Z','F': 3,'C': 2},'OS':18 'sC': {'from': '2020-03-31T20:00:00.000Z','to': '2020-05-29T20:00:00.000Z','F': 25,'C': 31}}

我想将上面的字典转换为数据框,如下面的熊猫所示。

@H_502_4@Params Value teachers 49 students 289 R 3.7 holidays 165 E_from 2020-02-29 E_to 2020-03-20 E_F 3 E_C 2 OS 18 sC_from 2020-03-31 sC_to 2020-05-29 sC_F 25 sC_C 31

df应该有两列,标题为“ params”和“ value”

解决方法

您可以使用json_normalize,然后转置数据框:

d = {'teachers': 49,'students': 289,'R': 3.7,'holidays': 165,'Em': {'from': '2020-02-29T20:00:00.000Z','to': '2020-03-20T20:00:00.000Z','F': 3,'C': 2},'OS':18,'sC': {'from': '2020-03-31T20:00:00.000Z','to': '2020-05-29T20:00:00.000Z','F': 25,'C': 31}}


df=pd.json_normalize(d,sep='_').T.reset_index().rename(columns={'index':'Params',0:'Value'})

输出:

df
Params                       Value
teachers                        49
students                       289
R                              3.7
holidays                       165
OS                              18
Em_from   2020-02-29T20:00:00.000Z
Em_to     2020-03-20T20:00:00.000Z
Em_F                             3
Em_C                             2
sC_from   2020-03-31T20:00:00.000Z
sC_to     2020-05-29T20:00:00.000Z
sC_F                            25
sC_C                            31