[英]Python Extract Nested JSON Values
我試圖從 URL 鏈接的 JSON 中提取一些嵌套值。 我能夠做到這一點,但認為我的過程效率不高,並且覺得有更好的方法來實現我所做的。
加載后的 JSON 文件如下所示:
{
"name": "English Premier League 2014/15",
"rounds": [
{
"name": "Matchday 1",
"matches": [
{
"date": "2014-08-16",
"team1": {
"key": "manutd",
"name": "Manchester United",
"code": "MUN"
},
"team2": {
"key": "swansea",
"name": "Swansea",
"code": "SWA"
},
"score1": 1,
"score2": 2
} ...
}
我的目標是獲得兩支球隊的鑰匙(例如“manutd”)和得分以及他們的價值觀。 下面的代碼是我如何實現的;
team_recs = []
team1 = []
team2 = []
score1 = []
score2 = []
ind = range(38)
for rec in df['rounds']:
trec = rec['matches']
team_recs.append(trec)
for i in ind:
for j in team_recs[i]:
team1.append(j['team1']['key'])
team2.append(j['team2']['key'])
score1.append(j['score1'])
score2.append(j['score2'])
data = pd.DataFrame([team1,score1,team2,score2]).T
data = data.rename(columns={0: 'team1', 1: 'score1', 2: 'team2', 3:'score2'})
data = data.astype({'score1': 'int32', 'score2':'int32'})
輸出(數據);
| team1 | score1 | team2 |score2 |
----|-----------|--------|-----------|-------|
| 0 | manutd | 1 | swansea | 2 |
| 1 | leicester | 2 | everton | 2 |
| 2 | qpr | 0 | hull | 1 |
| 3 | stoke | 0 | astonvilla| 1 |
這是 EPL 中足球比賽的數據,一個賽季有 38 場比賽。
正如 QuantumDreamer 在他們的評論中建議的那樣,您可以使用json_normalize ,如下所示:
import pandas as pd
import json
data = """{
"name": "English Premier League 2014/15",
"rounds": [
{
"name": "Matchday 1",
"matches": [
{
"date": "2014-08-16",
"team1": {
"key": "manutd",
"name": "Manchester United",
"code": "MUN"
},
"team2": {
"key": "swansea",
"name": "Swansea",
"code": "SWA"
},
"score1": 1,
"score2": 2
}
]
}
]
}"""
df = pd.json_normalize(
json.loads(data),
record_path=["rounds", "matches"],
meta=[["rounds", "name"]]
)
這導致
>>> print(df)
date score1 score2 team1.key team1.name team1.code \
0 2014-08-16 1 2 manutd Manchester United MUN
team2.key team2.name team2.code rounds.name
0 swansea Swansea SWA Matchday 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.