寻找一些指导,必须转换一个看起来像这样的json:
d = {
'dbname' : {
'table1' : [
{
'Name': 'wow',
'Type': 'str'
},
{
'Name': 'beto',
'Type': 'int'
},
{
'Name': 'claro',
'Type': 'int'
}
],
'table2' : [
{
'Name': 'date',
'Type': 'str'
},
{
'Name': 'clear',
'Type': 'bool'
}
]
},
'dbname2' : {
'table3' : [
{
'Name': 'wow',
'Type': 'str'
}
]
}
}
进入类似于这样的数据帧:
到目前为止,我可以使用以下命令生成一个只有“dbname”的数据框:
df = pd.json_normalize(d,
meta='dbname',
meta_prefix='Parent',
record_path=['dbname', 'table1' ])
df = df.explode('Parentdbname')
df.rename(columns={'Parentdbname':'TableName'}, inplace=True)
输出:
Name Type TableName
0 wow str table1
0 wow str table2
1 beto int table1
1 beto int table2
2 claro int table1
2 claro int table2
但似乎无法将 dbname2(或进一步的 'dbname's,因为 json 文件更长)进入数据帧(尝试为元数据和记录路径创建键列表),我理想情况下希望包含该列对于这里的 dbname 也是如此,但由于实际 json 文件中的表名都以相应的 db 为前缀,因此不相关。
编辑:首先意识到数据帧输出不正确,只是重复 table1 的值
答案 0 :(得分:0)
## You can use a for loop here if you have many tables.
dbname = pd.DataFrame(d['dbname']['table1'])
dbname['table'] = 'table1'
dbname3 = pd.DataFrame(d['dbname']['table2'])
dbname3['table'] = 'table2'
dbname2 = pd.DataFrame(d['dbname2']['table3'])
dbname2['table'] = 'table3'
pd.concat([dbname2, dbname, dbname3])
输出:
Name Type table
0 wow str table3
0 wow str table1
1 beto int table1
2 claro int table1
0 date str table2
1 clear bool table2