gpt4 book ai didi

python - 具有多个记录路径的 json_normalize

转载 作者:行者123 更新时间:2023-12-03 19:14:32 27 4
gpt4 key购买 nike

我正在使用 json_normalize 中给出的示例此处提供的文档pandas.json_normalize — pandas 1.0.3 documentation ,不幸的是,我无法粘贴我的实际 JSON,但此示例有效。从文档粘贴:

data = [{'state': 'Florida',
'shortname': 'FL',
'info': {'governor': 'Rick Scott'},
'counties': [{'name': 'Dade', 'population': 12345},
{'name': 'Broward', 'population': 40000},
{'name': 'Palm Beach', 'population': 60000}]},
{'state': 'Ohio',
'shortname': 'OH',
'info': {'governor': 'John Kasich'},
'counties': [{'name': 'Summit', 'population': 1234},
{'name': 'Cuyahoga', 'population': 1337}]}]
result = json_normalize(data, 'counties', ['state', 'shortname',
['info', 'governor']])
result


name population state shortname info.governor
0 Dade 12345 Florida FL Rick Scott
1 Broward 40000 Florida FL Rick Scott
2 Palm Beach 60000 Florida FL Rick Scott
3 Summit 1234 Ohio OH John Kasich
4 Cuyahoga 1337 Ohio OH John Kasich

如果 JSON 是下面的那个而不是 info 呢?是一个数组而不是一个字典:
data = [{'state': 'Florida',
'shortname': 'FL',
'info': [{'governor': 'Rick Scott'},
{'governor': 'Rick Scott 2'}],
'counties': [{'name': 'Dade', 'population': 12345},
{'name': 'Broward', 'population': 40000},
{'name': 'Palm Beach', 'population': 60000}]},
{'state': 'Ohio',
'shortname': 'OH',
'info': [{'governor': 'John Kasich'},
{'governor': 'John Kasich 2'}],
'counties': [{'name': 'Summit', 'population': 1234},
{'name': 'Cuyahoga', 'population': 1337}]}]

您将如何使用 json_normalize 获得以下输出:
         name  population    state shortname info.governor
0 Dade 12345 Florida FL Rick Scott
1 Dade 12345 Florida FL Rick Scott 2
2 Broward 40000 Florida FL Rick Scott
3 Broward 40000 Florida FL Rick Scott 2
4 Palm Beach 60000 Florida FL Rick Scott
5 Palm Beach 60000 Florida FL Rick Scott 2
6 Summit 1234 Ohio OH John Kasich
7 Summit 1234 Ohio OH John Kasich 2
8 Cuyahoga 1337 Ohio OH John Kasich
9 Cuyahoga 1337 Ohio OH John Kasich 2

或者如果有其他方法可以做到这一点,请告诉我。

最佳答案

json_normalize设计是为了方便而不是灵活性。它无法处理所有形式的 JSON(而且 JSON 太灵活,无法为其编写通用解析器)。

打电话如何json_normalize两次然后合并。这假设每个状态在您的 JSON 中只出现一次:

counties = json_normalize(data, 'counties', ['state', 'shortname'])
governors = json_normalize(data, 'info', ['state'])

result = counties.merge(governors, on='state')

关于python - 具有多个记录路径的 json_normalize,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61197756/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com