通过 Python json_normalize JSON 嵌套值的问题

Issue with JSON nested values through Python json_normalize

尽管查看了大量示例+解决方案,但我还没有找到任何适用于这个特定 JSON 模式的东西。

我有这行 JSON 来自 API:

x = {'rows': [{'columns':
                 [{'name': 'User ID', 'value': '0000123'},
                 {'name': 'Last Name', 'value': 'Test1'}]},
              {'columns':
                 [{'name': 'User ID', 'value': '0000567'},
                 {'name': 'Last Name', '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

我正在研究数据透视表,但没有可用的索引。我可以附加数组值吗? 或者,可能有更好的方法来创建数据框,因此它可以轻松规范化。

感谢帮助。

有人可能有更好的答案,但如果您检查 json_normalize (link) 的来源,它是 "Disastrously inefficient for now" 并且只使用列表推导和循环。因此,您可能不会通过手动规范化数据而损失太多效率。这是一个为清楚起见而编写的示例(即,如果您正在检索大型 jsons,这将不会很好地扩展)循环遍历您的数据以构建字段:

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

显然不理想,希望看到其他答案,但鉴于 jsons 带有开放式格式,很难找到开箱即用的 pandas 方法如果你不够幸运,你的 json 结构与 pandas 可以处理的结构相匹配。