通过Python json_normalize带有JSON嵌套值的问题

问题描述 投票:1回答:1

尽管浏览了许多示例和解决方案,但我还没有发现任何适用于该特定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

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

感谢帮助。

python json pivot normalize
1个回答
0
投票

某人可能有更好的答案,但是如果您检查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结构,将很难找到一个开箱即用的pandas方法匹配大熊猫可以处理的那些。

© www.soinside.com 2019 - 2024. All rights reserved.