通过Python JSON嵌套值的问题json_normalize

尽管查看了许多示例和解决方案,但我还没有发现任何适用于该特定JSON模式的东西。

我有这行来自API的JSON:

x = {'rows': [{'columns':
                 [{'name': 'User ID','value': '0000123'},{'name': 'Last Name','value': 'Test1'}]},{'columns':
                 [{'name': 'User ID','value': '0000567'},'value': 'Test2'}]}]}

由于某种原因,我无法使用各种形式的json_normalize将其输出,我能得到的最接近的是将它们堆叠。

pd.json_normalize(data=x,record_path=['rows',['columns']])

结果:

        name    value
0    User ID  0000123
1  Last Name    Test1
2    User ID  0000567
3  Last Name    Test2

但是我正在寻找它来输出:

User ID  Last Name
0000123  Test1
0000567  Test2

我正在寻找枢轴,但是没有可用的索引。我可以追加数组值吗? 另外,可能只有更好的方法来创建数据框,因此可以轻松进行规范化。

帮助表示赞赏。

dukx95 回答:通过Python JSON嵌套值的问题json_normalize

也许有人会给出更好的答案,但是如果您检查json_normalizelink)的来源,则“暂时的效率很低”,仅使用列表理解和循环。因此,通过手动规范化数据可能不会损失很多效率。这是一个为清楚起见编写的示例(即,如果您要检索大型json,则扩展性不佳)会遍历数据以构建字段:

normalized_data={'User ID':[],'Last Name':[]}
for row in x['rows']:
    for column in row['columns']:
        normalized_data[column['name']].append(column['value'])

df=pd.DataFrame(normalized_data)
print(df)

打印:

   User ID Last Name
0  0000123     Test1
1  0000567     Test2

显然不是很理想,并且很乐意看到其他答案,但是鉴于json具有开放式格式,因此如果您不太幸运地拥有json,将很难找到一种开箱即用的熊猫方法。结构与大熊猫可以处理的匹配。

本文链接:https://www.f2er.com/2670651.html

大家都在问