将嵌套的python字典转换为多索引的pandas数据帧

时间:2016-11-10 12:52:53

标签: python pandas dictionary

如何将嵌套字典转换为pandas多索引数据框?

以下是一个例子:

dct={'outer':{}}
for i in dct:
    dct[i]={'middle':{}}
    for j in dct[i]:
        dct[i][j]={}
    for j in dct[i]:
        dct[i][j]['inner']=10

print dct

输出:

{'outer': {'middle': {'inner': 10}}}

我想在pandas数据框中看到这样的内容:

outer   middle   inner   value
                 inner2  value
        middle2  inner   value
outer2  middle   inner   value
                 inner2  value
        middle2  inner   value 

我知道多索引是一种很好的方法,但我不知道如何制作数据框。任何人都可以给我一些指示吗?

1 个答案:

答案 0 :(得分:2)

我认为您可以使用dict comprehension创建的concat DataFrame.from_dictstack - 但输出为Series MultiIndex:< / p>

dct={'outer':{}, 'outer2':{}}
for i in dct:
    dct[i]={'middle':{}, 'middle2':{}}
    for j in dct[i]:
        dct[i][j]={}
    for j in dct[i]:
        dct[i][j]['inner']=10
        dct[i][j]['inner2']=20

print (dct)
{'outer2': {'middle2': {'inner': 10, 'inner2': 20}, 
'middle': {'inner': 10, 'inner2': 20}}, 
'outer': {'middle2': {'inner': 10, 'inner2': 20}, 
'middle': {'inner': 10, 'inner2': 20}}}
print (pd.concat({key:pd.DataFrame.from_dict(dct[key],orient='index') 
                  for key in dct.keys()}))
                inner  inner2
outer  middle      10      20
       middle2     10      20
outer2 middle      10      20
       middle2     10      20

df = pd.concat({key:pd.DataFrame.from_dict(dct[key], orient='index') 
                for key in dct.keys()}).stack()
print (df)
outer   middle   inner     10
                 inner2    20
        middle2  inner     10
                 inner2    20
outer2  middle   inner     10
                 inner2    20
        middle2  inner     10
                 inner2    20
dtype: int64