Python 如何从嵌套字典创建扩展数据帧?

Python 如何从嵌套字典创建扩展数据帧?,python,pandas,Python,Pandas,我有一个嵌套字典,并试图从中创建一个pandas数据框架,但它只提供两列,我希望所有字典键都是列 MWE 将numpy导入为np 作为pd进口熊猫 历史={'validation_0': {'error':[0.06725,0.067,0.067], 'error@0.7': [0.104125,0.103875,0.103625], “auc”:[0.92729,0.932045,0.934238], }, “验证_1”: {'error':[0.1535,0.151,0.1505], 'er

我有一个嵌套字典,并试图从中创建一个pandas数据框架,但它只提供两列,我希望所有字典键都是列

MWE
将numpy导入为np
作为pd进口熊猫
历史={'validation_0':
{'error':[0.06725,0.067,0.067],
'error@0.7': [0.104125,0.103875,0.103625],
“auc”:[0.92729,0.932045,0.934238],
},
“验证_1”:
{'error':[0.1535,0.151,0.1505],
'error@0.7': [0.239,0.239,0.239],
“auc”:[0.898305,0.905611,0.909242]
}
}
df=pd.DataFrame(历史)
打印(df)
验证\u 0验证\u 1
误差[0.06725,0.067,0.067][0.1535,0.151,0.1505]
error@0.7  [0.104125, 0.103875, 0.103625]           [0.239, 0.239, 0.239]
auc[0.92729,0.932045,0.934238][0.898305,0.905611,0.909242]
要求的 让我们试试:

a = df.unstack()

pd.DataFrame(a.values.tolist(), index=a.index).T
同样,如果您从
历史开始

pd.concat({k:pd.DataFrame(v) for k,v in history.items()}, axis=1)
输出:

                      validation_0                     validation_1                    
         error  error@0.7      auc        error error@0.7       auc
0      0.06725  0.104125  0.927290       0.1535     0.239  0.898305
1      0.06700  0.103875  0.932045       0.1510     0.239  0.905611
2      0.06700  0.103625  0.934238       0.1505     0.239  0.909242

您还可以在
json\u normalize
之后对其进行分解:

print (pd.json_normalize(history).apply(pd.Series.explode).reset_index(drop=True))

  validation_0.error validation_0.error@0.7 validation_0.auc validation_1.error validation_1.error@0.7 validation_1.auc
0            0.06725               0.104125          0.92729             0.1535                  0.239         0.898305
1              0.067               0.103875         0.932045              0.151                  0.239         0.905611
2              0.067               0.103625         0.934238             0.1505                  0.239         0.909242
print (pd.json_normalize(history).apply(pd.Series.explode).reset_index(drop=True))

  validation_0.error validation_0.error@0.7 validation_0.auc validation_1.error validation_1.error@0.7 validation_1.auc
0            0.06725               0.104125          0.92729             0.1535                  0.239         0.898305
1              0.067               0.103875         0.932045              0.151                  0.239         0.905611
2              0.067               0.103625         0.934238             0.1505                  0.239         0.909242