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

FBref足球数据爬取问题:未开赛赛事无法加载至ML数据集

问题分析与解决方案

核心问题原因

你的代码使用默认的**内连接(inner join)**合并matches(包含已完赛+未开赛赛事)和shooting(仅包含已完赛赛事的射门数据),只有两边Date完全匹配的行才会被保留。未开赛赛事没有对应的射门统计数据,因此合并时被直接过滤掉了。

修复步骤

1. 改用左连接保留所有赛事行

将merge操作改为左连接(left join),这样matches中的所有赛事(包括未开赛的)都会被保留,没有射门数据的字段自动填充为NaN,适配机器学习中待预测样本的特征缺失场景。

2. 新增标记区分赛事状态

添加字段标记已完赛/未开赛赛事,方便后续对两类数据做不同处理(比如已完赛数据用于训练,未开赛数据用于预测)。

修改后的关键代码段

try:
    # 左连接保留matches中所有赛事行
    team_data = matches.merge(shooting[["Date", "Sh", "SoT", "Dist", "FK", "PK", "PKatt"]], 
                             on="Date", 
                             how="left")
    # 标记赛事是否已完赛:已完赛赛事有明确比分,未开赛的Score为空或含'vs'
    team_data["Is_Played"] = team_data["Score"].notna() & ~team_data["Score"].str.contains("vs", na=False)
except ValueError:
    continue

额外注意事项

  • 未开赛赛事的Score、Sh、SoT等字段会是NaN,后续机器学习预处理时可根据需求选择填充默认值(如0)、删除或用模型预测缺失值。
  • 确保matches和shooting的Date列格式统一(如YYYY-MM-DD),避免格式不匹配导致连接失败,可通过以下代码统一转换:
    matches["Date"] = pd.to_datetime(matches["Date"])
    shooting["Date"] = pd.to_datetime(shooting["Date"])
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 10:35:01