NBA_API:为什么这段Python代码返回空数据框?

0 投票
1 回答
43 浏览
提问于 2025-04-13 02:47

我只是想获取今天所有的比赛数据;之后我会把球队的统计信息合并到这些数据上,但那是另一个问题。

我的问题是,下面的代码为什么会返回一个空的数据框?我可以通过一个循环打印出结果——这就是我得到下面想要的输出的方式——但不知为什么我无法把它们放进一个数据框里。我哪里做错了?

from nba_api.live.nba.endpoints import scoreboard
import pandas as pd

todayBoard = scoreboard.ScoreBoard()
ScoreBoardDate = todayBoard.score_board_date
games = todayBoard.games.get_dict()

todayGames = pd.DataFrame()

for game in games:
    todayGames['GAME_ID']=game['gameId']
    todayGames['AWAY']=game['awayTeam']['teamTricode']
    todayGames['HOME']=game['homeTeam']['teamTricode']

todayGames

对于2024年3月21日,预期的输出应该是:

GAME_ID AWAY HOME
0022301004 NOP ORL
0022301005 SAC WAS
0022301006 CHI HOU
0022301007 BKN MIL
0022301008 UTA DAL
0022301009 NYK DEN
0022301010 ATL PHX

1 个回答

0

有两个问题:

  1. games 是一个字典的列表,所以你不能像你现在这样直接把它的值放到 pandas 数据框里。

  2. 即使可以这样做,你在每次循环的时候也会覆盖掉之前的值。为了避免这个问题,你可以使用 collections.defaultdict

你可以从 games 中提取你想要的值到一个新的字典 todayGames,然后用这个字典来创建一个数据框:

from collections import defaultdict

# rest of the code omitted...

todayGames = defaultdict(list)

for game in games:
    todayGames["GAME_ID"].append(game["gameId"])
    todayGames["AWAY"].append(game["awayTeam"]["teamTricode"])
    todayGames["HOME"].append(game["homeTeam"]["teamTricode"])

df = pd.DataFrame(todayGames)
      GAME_ID AWAY HOME
0  0022301004  NOP  ORL
1  0022301005  SAC  WAS
2  0022301006  CHI  HOU
3  0022301007  BKN  MIL
4  0022301008  UTA  DAL
5  0022301009  NYK  DEN
6  0022301010  ATL  PHX

撰写回答