通过 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 可以处理的结构相匹配。
尽管查看了大量示例+解决方案,但我还没有找到任何适用于这个特定 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 可以处理的结构相匹配。