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

如何将爬取的NFL各球队数据的所有行合并到同一个DataFrame中

解决方案

你只需要先把每次循环生成的单球队DataFrame暂存到列表,最后统一合并即可,还可以新增球队标识列方便后续数据筛选,修改后代码如下:

import pandas as pd

team_abbreviations = ['buf','mia','nwe','nyj','htx','clt','jax','oti','cin','pit',
                  'cle','rav','den','kan','rai','sdg','phi','dal','nyg','was',
                  'car','nor','tam','atl','chi','det','gnb','min','crd','ram','sea','sfo']

# 初始化空列表存储每个球队的DataFrame
df_list = []

for i in team_abbreviations:
       url = 'https://www.pro-football-reference.com/teams/{0}/2021/gamelog/'.format(i)
       data = pd.read_html(url)[0]
       data.rename(columns={'Unnamed: 3_level_1': 'Box_link'}, inplace=True)
       data.rename(columns={'Unnamed: 4_level_1': 'W/L'}, inplace=True)
       data.rename(columns={'Unnamed: 6_level_1': '@'}, inplace=True)
       data.rename(columns={'Unnamed: 3_level_1': 'Box_link'}, inplace=True)
       data.columns = ['Week', 'Day', 'Date', 'Box_link', 'W/L', 'OT', 'Home/Away', 'Opp_Team', 'Tm_Score',
                'Opp_Score', 'PassCmp', 'PassAtt', 'PassYds', 'PassTD', 'Int', 'Sk', 'YdsLost_Sk', 'PassY/A',
                'PassNY/A', 'Cmp%', 'PasserRate', 'RushAtt', 'RushYds', 'RushY/A', 'RushTD', 'FGM', 'FGA', 'XPM',
                'XPA', 'Pnt', 'PntYds', '3DConv', '3DAtt', '4DConv', '4DAtt', 'ToP']
       data = data[pd.notnull(data['Opp_Score'])]
       # 新增球队缩写列,方便后续区分数据所属球队
       data['team_abbr'] = i
       # 把当前球队的DataFrame存入列表
       df_list.append(data)

# 合并所有子DataFrame为一个完整的大DataFrame,ignore_index参数用于重置行索引
full_df = pd.concat(df_list, ignore_index=True)

# 输出查看合并后的全量数据
print(full_df)

关键逻辑说明

  • pd.concat()默认按行拼接列表里的所有DataFrame,只要所有子DataFrame的列名一致就能正常拼接
  • 加ignore_index=True是为了重置合并后DataFrame的行索引,避免出现重复的索引值
  • 新增的team_abbr列可以帮你快速筛选任意球队的比赛数据,不需要再单独拆分原数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 16:15:03