首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ESPN FF的Python故障

ESPN FF的Python故障
EN

Stack Overflow用户
提问于 2021-09-03 20:06:11
回答 1查看 70关注 0票数 0

第一次在这里发帖,但在从ESPN中提取梦幻足球数据的代码中遇到了问题。我从Steven Morse的博客(https://stmorse.github.io/journal/espn-fantasy-v3.html)中拉出了这段代码,除了我得到的一个错误之外,它似乎工作得很好。错误是:

代码语言:javascript
复制
File "<ipython-input-65-56a5896c1c3c>", line 3, in <listcomp>
    game['away']['teamId'], game['away']['totalPoints'],

KeyError: 'away'

我查了字典,发现“away”就在里面。我不明白的是为什么“家”行而不是“走”行。这是我正在使用的代码。如有任何帮助,我们将非常感谢:

代码语言:javascript
复制
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']]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-03 21:02:05

看起来赛程中的一些比赛没有客场球队:

代码语言:javascript
复制
{'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等。

代码语言:javascript
复制
df = pd.json_normalize(r.json()['schedule'])

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

代码语言:javascript
复制
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']]

对于没有客场团队的游戏,pandas将用NaN值填充这些列。

代码语言:javascript
复制
df[df.Team1.isna()]

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69050097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档