You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用NBA_API获取当日赛事时Python代码返回空DataFrame的原因

问题分析与解决

错误原因

你当前的循环赋值逻辑存在问题:每次循环里todayGames['GAME_ID']=game['gameId']这类操作,是将整列的值覆盖为当前game的对应字段,而非新增一行数据。初始空DataFrame在第一次赋值时会生成一行,但后续循环会持续修改这一行的内容,最终要么只保留最后一条赛事数据,若当日无赛事则直接返回空DataFrame。

修正方案

方案一:先收集数据到列表,再转DataFrame(推荐)

这种方式效率更高,符合Pandas的最佳实践:

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

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

# 用列表存储每一行的赛事数据
game_data = []
for game in games:
    game_row = {
        'GAME_ID': game['gameId'],
        'AWAY': game['awayTeam']['teamTricode'],
        'HOME': game['homeTeam']['teamTricode']
    }
    game_data.append(game_row)

# 将列表转换为DataFrame
todayGames = pd.DataFrame(game_data)
print(todayGames)

方案二:循环中逐行追加(不推荐大量数据场景)

若坚持逐行添加,可使用pd.concat(Pandas 2.0+已弃用append方法):

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

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

todayGames = pd.DataFrame()

for game in games:
    # 构造单行DataFrame并追加到主表
    row = pd.DataFrame({
        'GAME_ID': [game['gameId']],
        'AWAY': [game['awayTeam']['teamTricode']],
        'HOME': [game['homeTeam']['teamTricode']]
    })
    todayGames = pd.concat([todayGames, row], ignore_index=True)

print(todayGames)

验证结果

运行修正后的代码,2024-03-21会输出预期结果:

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

内容的提问来源于stack exchange,提问作者mmyoung77

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 17:10:12