代码之家  ›  专栏  ›  技术社区  ›  Micawber

从多个嵌套字典创建panda数据框

  •  1
  • Micawber  · 技术社区  · 7 年前

    我有一本字典,里面有两个嵌套的字典。下面是一个简单的示例:

    df = {'line1': {'a': {'a': 1, 'b': 2}, 'b': {'a': 3, 'b': 4}},
          'line2': {'a': {'a': 5, 'b': 6}, 'b': {'a': 7, 'b': 8}},
          'line3': {'a': {'a': 9, 'b': 10}, 'b': {'a': 11, 'b': 12}},
          'line4': {'a': {'a': 13, 'b': 14}, 'b': {'a': 15, 'b': 16}}}
    

    我的程序中有数百行代码,这种结构似乎最容易存储我需要的所有数据。我想创建一个熊猫数据框,如下所示:

            aa  ab  ba  bb
    line1   1   2   3   4
    line2   5   6   7   8
    line3   9   10  11  12
    line4   13  14  15  16
    

    但警察局似乎。DataFrame(dict)命令不能正确处理2个以上的嵌套字典,我得到了以下结果:

    pd.DataFrame(df).T
    
                              a                     b
    line1    {u'a': 1, u'b': 2}    {u'a': 3, u'b': 4}
    line2    {u'a': 5, u'b': 6}    {u'a': 7, u'b': 8}
    line3   {u'a': 9, u'b': 10}  {u'a': 11, u'b': 12}
    line4  {u'a': 13, u'b': 14}  {u'a': 15, u'b': 16}
    

    有没有简单的方法来解决这个问题?或者我必须编写额外的代码来转换字典,或者更糟糕的是,设计另一种存储数据的方法(这将使我重新编写程序的几个部分)?

    提前谢谢。

    1 回复  |  直到 7 年前
        1
  •  3
  •   jezrael    7 年前

    使用 concat 具有 dict comprehension ,然后通过 unstack 和转换 MultiIndex 通过 map :

    df = pd.concat({k: pd.DataFrame(v) for k, v in df.items()}).unstack()
    df.columns = df.columns.map(''.join)
    print (df)
           aa  ab  ba  bb
    line1   1   2   3   4
    line2   5   6   7   8
    line3   9  10  11  12
    line4  13  14  15  16