ESPN FF的Python问题

2024-04-27 14:25:31 发布

您现在位置:Python中文网/ 问答频道 /正文

第一次在这里发帖,但我用一些代码从ESPN中获取梦幻足球数据时遇到了问题。我从Steven Morse的博客(https://stmorse.github.io/journal/espn-fantasy-v3.html)上下载了这篇文章,除了我得到的一个错误外,它似乎还可以工作。错误是:

File "<ipython-input-65-56a5896c1c3c>", line 3, in <listcomp>
    game['away']['teamId'], game['away']['totalPoints'],

KeyError: 'away'

我查了字典,发现“away”在里面。我不明白的是为什么“家”有效,而不是“走”。这是我正在使用的代码。感谢您的帮助:

import requests
import pandas as pd


url = 'https://fantasy.espn.com/apis/v3/games/ffl/seasons/2020/segments/0/leagues/721579?view=mMatchupScore'
      
r = requests.get(url,
                 cookies={"swid": "{1E653FDE-DA4A-4CC6-A53F-DEDA4A6CC663}",
                          "espn_s2": "AECpfE9Zsvwwsl7N%2BRt%2BAPhSAKmSs%2F2ZmQVuHJeKG8LGgLBDfRl0j88CvzRFsrRjLmjzASAdIUA9CyKpQJYBfn6avgXoPHJgDiCqfDPspruYqHNENjoeGuGfVqtPewVJGv3rBJPFMp1ugWiqlEzKiT9IXTFAIx3V%2Fp2GBuYjid2N%2FFcSUlRlr9idIL66tz2UevuH4F%2FP6ytdM7ABRCTEnrGXoqvbBPCVbtt6%2Fu69uBs6ut08ApLRQc4mffSYCONOqW1BKbAMPPMbwgCn1d5Ruubl"})


d = r.json()

df = [[
        game['matchupPeriodId'],
        game['away']['teamId'], game['away']['totalPoints'],
        game['home']['teamId'], game['home']['totalPoints']
        
    ] for game in d['schedule']]
df = pd.DataFrame(df, columns=['Week', 'Team1', 'Score1', 'Team2', 'Score2'])
df['Type'] = ['Regular' if w<=14 else 'Playoff' for w in df['Week']]

Tags: 代码inhttpsimportgamedf错误v3
1条回答
网友
1楼 · 发布于 2024-04-27 14:25:31

似乎赛程中的一些比赛没有客场球队:

{'home': {'adjustment': 0.0,
  'cumulativeScore': {'losses': 0, 'statBySlot': None, 'ties': 0, 'wins': 0},
  'pointsByScoringPeriod': {'14': 102.7},
  'teamId': 1,
  'tiebreak': 0.0,
  'totalPoints': 102.7},
 'id': 78,
 'matchupPeriodId': 14,
 'playoffTierType': 'WINNERS_BRACKET',
 'winner': 'UNDECIDED'}

对于像这样的嵌套json数据,使用pandas.json_normalize通常更容易,这会使数据结构变得平坦,并为您提供一个数据框架,其中包含许多名为home.cumulativeScore.losses等的列

df = pd.json_normalize(r.json()['schedule'])

然后,您可以通过删除不关心的列等方式重塑数据帧

df = pd.json_normalize(r.json()['schedule'])

column_names = {
    'matchupPeriodId':'Week', 
    'away.teamId':'Team1', 
    'away.totalPoints':'Score1',
    'home.teamId':'Team2', 
    'home.totalPoints':'Score2',
}

df = df.reindex(columns=column_names).rename(columns=column_names)
df['Type'] = ['Regular' if w<=14 else 'Playoff' for w in df['Week']]

对于没有客场球队的比赛,熊猫队将用NaN值填充这些列

df[df.Team1.isna()]

enter image description here

相关问题 更多 >