【问题标题】:Converting a nested python dictionary into a multi-indexed pandas dataframe将嵌套的 python 字典转换为多索引的 pandas 数据框
【发布时间】:2017-03-24 12:17:46
【问题描述】:

如何将嵌套字典转换为 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 

我知道多索引是一种很好的方法,但我不确定如何制作数据框。谁能给我一些指点?

【问题讨论】:

    标签: python pandas dictionary


    【解决方案1】:

    我认为您可以使用由dict comprehension 创建的concatDataFrame.from_dict 和最后一个stack - 但输出是SeriesMultiIndex

    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
    

    【讨论】:

      猜你喜欢
      • 2018-06-03
      • 2015-10-06
      • 2020-07-31
      • 1970-01-01
      • 2021-11-28
      • 2022-01-07
      • 2021-08-06
      • 2021-12-21
      • 2018-08-14
      相关资源
      最近更新 更多