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

移除匹配表头行的重复行:NFL数据爬取的去重优化需求

更高效移除重复表头行的方案

针对你爬取NFL数据时遇到的重复表头问题,以下几个方法比关键词过滤更通用、更可靠:

方案1:基于"表头行全等于列名"的特征过滤

重复出现的表头行有一个明确特征:每一列的内容都等于该列的列名。利用这个特征可以精准过滤所有这类行,无需依赖特定关键词:

# 替换原来的关键词过滤行
scorings_df = scorings_df[scorings_df.ne(scorings_df.columns).any(axis=1)]
  • 原理:scorings_df.ne(scorings_df.columns)逐单元格判断内容是否不等于列名,any(axis=1)确保只要该行有一个单元格不是列名(即有效数据行)就保留。
  • 优势:不受表头文本大小写、未来赛事表头差异影响,完全通用。

方案2:针对数值型列的类型校验(适合Week列以数字为主的场景)

如果Week列的有效数据大多是数字(包括季后赛数字周次),可以通过类型转换过滤无法转为数字的表头行:

# 替换原来的关键词过滤行
scorings_df = scorings_df[pd.to_numeric(scorings_df['Week'], errors='coerce').notna()]
  • 原理:pd.to_numeric(..., errors='coerce')将非数字内容转为NaN,再通过notna()筛选出有效数字行。
  • 注意:若Week列存在合法非数字文本(如"SuperBowl"),此方案会误删,此时优先用方案1。

整合方案后的完整代码示例

同时清理了原代码中冗余的初始赋值:

import pandas as pd
import datetime

current_year = 2023 
url_scores = 'https://www.pro-football-reference.com/years/'

# 初始化空DataFrame
Scoring_df = pd.DataFrame()

# 循环爬取最近2年数据(测试用)
for year in range(current_year, current_year - 2, -1):
    year_url_stats = f"{url_scores}{year}/games.htm"
    Scores = pd.read_html(year_url_stats)
    scorings_df = Scores[0]
    
    # 用方案1过滤重复表头行
    scorings_df = scorings_df[scorings_df.ne(scorings_df.columns).any(axis=1)]
    
    # 过滤未来赛事
    scorings_df['TempDate'] = pd.to_datetime(scorings_df['Date'], errors='coerce')
    scorings_df = scorings_df[scorings_df['TempDate'] <= datetime.datetime.now()]
    scorings_df.drop(columns=['TempDate'], inplace=True)  
    
    scorings_df['Year'] = year
    
    # 清理队名
    scorings_df['Winner/tie'] = scorings_df['Winner/tie'].str.split().str[-1]
    scorings_df['Loser/tie'] = scorings_df['Loser/tie'].str.split().str[-1]
    
    # 重排列
    columns_order = ['Year', 'Week', 'Day', 'Date', 'Time', 'Winner/tie', 'Loser/tie', 'PtsW', 'PtsL', 'YdsW', 'TOW', 'YdsL', 'TOL']
    scorings_df = scorings_df[columns_order]
    
    Scoring_df = pd.concat([Scoring_df, scorings_df], ignore_index=True)

print(Scoring_df.head())

方案优势说明

  • 方案1完全不依赖特定列的关键词,避免了未来表头文本变化导致的失效问题;
  • 比字符串匹配更高效,处理大量数据时优势明显;
  • 逻辑直接针对重复表头的本质特征,更严谨可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 13:41:33