簡體   English   中英

Python 提取嵌套的 JSON 值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM