从 JSON 创建多头表 [英] Creating a multi-header table from JSON
问题描述
我是熊猫的新手.我正在尝试创建下表:
I'm new to pandas. I'm trying to create the following table:
| C | Perl |
| line | func | line | func |
version | covered | total | covered | total |
我创建了以下 JSON 结构:
There is the following structure of JSON that I have created:
{
"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 并创建表.我的第一个问题是我似乎无法理解我应该如何创建表的标题.从前面的主题中,我发现我应该使用 MultiIndex
但由于某种原因,我尝试过的任何组合都不会创建想要的标题.可以告诉我如何创建这个表吗?
I want to iterate over this JSON and create the table. My first problem is that I can't seem to understand how should I create the header of the table. From previous topics, I found that I should use MultiIndex
but for some reason, any combination I tried, does not create the wanted header. Is it possible to show me how to create this table?
推荐答案
我的方法
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():
d['columns'].append((k1,k2))
d['data'].append(v2)
d = dict(d)
d['data'] = np.array(d['data']).reshape(1, len(d['data']))
d['columns'] = pd.MultiIndex.from_tuples(columns)
<小时>
构建数据帧
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
使用 defaultdict
但可以在开始循环之前只启动三个列表
use defaultdict
but could just start three lists before starting the loop
编辑
用于预期输出
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 line func func func func
version1 covered total covered total covered total
详情
print(d)
#{'index': ['version1'], 'columns': MultiIndex([('perl', 'line_covered'),
# ('perl', 'line_total'),
# ('perl', 'func_covered'),
# ('perl', 'func_total'),
# ( 'C', 'func_covered'),
# ( 'C', 'func_total')],
# ), 'data': array([[207, 312, 15, 18, 10, 10]])}
你可以看到什么**
做
you can see what**
do
这篇关于从 JSON 创建多头表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!