Python 从JSON创建多标头表

Python 从JSON创建多标头表,python,pandas,multi-index,Python,Pandas,Multi Index,我对熊猫不熟悉。我正在尝试创建下表: | C | Perl | | line | func | line | func | version | covered | total | covered | total | 我创建了以下JSON结构: { "version1":{ "perl":{ "line_covered":207

我对熊猫不熟悉。我正在尝试创建下表:

        |          C         |          Perl      |
        |   line   |   func  |    line   |   func |
version |  covered |  total  |  covered  |  total |
我创建了以下JSON结构:

{
   "version1":{
      "perl":{
         "line_covered":207,
         "line_total":312,
         "func_covered":15,
         "func_total":18
      },
      "C":{
         "line_covered":321,
         "line_total":512,
         "func_covered":10,
         "func_total":10
      }
   }
}

我想迭代这个JSON并创建表。我的第一个问题是,我似乎无法理解如何创建表的标题。从前面的主题中,我发现我应该使用
多索引
,但由于某些原因,我尝试的任何组合都不会创建想要的标题。是否可以向我演示如何创建此表?

我的方法

import numpy as np
from collections import defaultdict
d = defaultdict(list)


构建数据帧

pd.DataFrame(**d)
输出

                 perl                                               C                       
         line_covered line_total func_covered func_total func_covered           func_total   
version1          207        312           15         18           10  version1         10   
             perl                               C       
             line   line     func   func     func   func
version1  covered  total  covered  total  covered  total
使用
defaultdict
,但可以在启动循环之前启动三个列表

编辑

用于预期的输出用途

import numpy as np
from collections import defaultdict
d = defaultdict(list)
for k,v in my_dict.items():
    d['index'].append(k)
    for k1,v1 in v.items():
        for k2,v2 in v1.items():
            split = k2.split('_')
            d['columns'].append((k1, split[0]))
            d['data'].append(split[1])
d = dict(d)
d['data'] = np.array(d['data']).reshape(1,len(d['data']))
d['columns'] = pd.MultiIndex.from_tuples(d['columns']).copy()
pd.DataFrame(**d)

输出

                 perl                                               C                       
         line_covered line_total func_covered func_total func_covered           func_total   
version1          207        312           15         18           10  version1         10   
             perl                               C       
             line   line     func   func     func   func
version1  covered  total  covered  total  covered  total
细节


你可以看到什么做

numpy库,你需要导入numpy作为np,我明白了。由于某些原因,我得到了
ValueError:无法将大小为8的数组重塑为形状(1,1)
在线
d['data']=np.array(d['data'])。重塑(1,len(data))
对不起,您需要
。重塑(1,len(d['data'])
我使用
数据,但忘了将其删除。解决方案更新了!我试图打印
d
,但我得到了
{'index':['version1'],'columns':多索引(级别=['C','perl'],['func','line']],标签=[[1,1,1,1,1,0,0],[0,0,1,1,1,0,0,1]],'data':数组([[[covered','total','covered','total','covered','covered','total','covered','total']),dtype='Your'welcome:),我们使用
**
将参数传递给
pd.DataFrame
对象,您可以看到:,您可以检查:
dict(**d)==d
是否为真