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

sportsreference爬取NBA赛程时为DataFrame添加所属球队列

问题解决方法

只需要在拉取单支球队赛程时提前给数据打上球队标识,再合并总表,就能直接得到带team字段的完整赛程表,不会出现记录和球队错配的问题。

推荐改造代码(兼容新版pandas,运行效率更高)

from sportsreference.nba.schedule import Schedule
import pandas as pd

# 全量NBA球队列表,将原代码单独初始化的MIL纳入列表统一处理,逻辑更简洁
league = ['MIL','CHO','LAL','LAC','SAC','ATL','MIA','DAL','POR',
          'HOU','NOP','PHO','WAS','MEM','BOS','DEN','TOR','SAS',
          'PHI','BRK','UTA','IND','OKC','ORL','MIN','DET',
          'NYK','CLE','CHI','GSW']

schedule_dfs = []
for team in league:
    # 拉取单队指定赛季的赛程数据
    team_schedule = Schedule(team, year="2020").dataframe
    # 新增team列,当前队所有赛程记录统一赋值为对应球队缩写
    team_schedule['team'] = team
    schedule_dfs.append(team_schedule)

# 一次性合并所有球队赛程,重置索引避免重复
league_schedule = pd.concat(schedule_dfs).reset_index(drop=True)

改造说明

  • 取消原代码单独初始化MIL队赛程的写法,将所有球队放入统一列表循环处理,避免重复写赋值逻辑,后续增减球队也更方便
  • 每支球队的赛程拉取后立刻打所属球队标识,从根源避免记录和主队对应错误的问题
  • 用pd.concat一次性合并所有单队数据表,代替原代码逐次append的写法,运行速度更快,同时兼容pandas 2.0及以上版本(新版pandas已经移除了DataFrame.append方法)
  • 合并后调用reset_index(drop=True)重置行索引,避免多队数据合并后出现索引重复的问题

最小改动方案(适配原有代码结构)

如果不想调整原有代码的书写逻辑,只需要加两行代码即可实现需求:

  1. 初始化MIL队赛程后,新增一行给MIL的记录打标识:league_schedule['team'] = 'MIL'
  2. 循环内追加数据前,先给当前球队的赛程打上对应标识,改造后的循环代码如下:
league_schedule = Schedule('MIL', year="2020").dataframe
league_schedule['team'] = 'MIL'
for team in league:
    cur_team_df = Schedule(team , year="2020").dataframe
    cur_team_df['team'] = team
    league_schedule = league_schedule.append(cur_team_df)

注意:该写法仅适用于pandas 1.x版本,新版pandas运行会报属性错误,优先推荐前面的concat写法。

运行改造后的代码,得到的league_schedule就会包含team列,字段顺序和取值完全匹配你需要的目标表结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 04:09:41