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

如何使用Python和Pandas解析NFL文本数据并拆分字段到不同数据单元格

NFL Fantasy预测数据结构化Python解决方案

核心思路

  • 过滤原始文本中的空行、球队比分行,仅保留球员统计行
  • 用正则拆分球员姓名与统计字符串
  • 针对不同格式的统计串,编写对应正则规则捕获接球数、码数、达阵数三个目标字段,缺失字段统一填充空值
  • 将结构化后的数据转换为pandas DataFrame

完整实现代码

import re
import pandas as pd

# 这里替换为你自己的原始数据文本
raw_text = """Bears 24-17 Jaguars

M.Trubisky- 234/2TDs
D.Montgomery- 113 scrim yards/1 rush TD/4 rec
A.Robinson- 9/114/1
C.Kmet- 3/35/0

G.Minshew- 183/1TD/2int
J.Robinson- 77 scrim yards/1 rush TD/4 rec
DJ.Chark- 3/36"""

# 预处理:拆分行为列表,过滤无效行
lines = [line.strip() for line in raw_text.split('\n') if line.strip()]
# 过滤球队比分行
player_lines = [line for line in lines if not re.search(r'\d+-\d+', line)]

def parse_player_stat(line):
    # 拆分球员姓名和统计字符串
    name_pat = re.match(r'^(.+?)\s*-\s*(.+)$', line)
    if not name_pat:
        return None
    player_name = name_pat.group(1)
    stat_str = name_pat.group(2)

    # 提取接球数
    rec_pat = re.search(r'(\d+)\s*rec', stat_str)
    if rec_pat:
        receptions = int(rec_pat.group(1))
    else:
        # 适配外接手/近端锋常用的 接球数/码数/达阵 格式
        stat_segs = stat_str.split('/')
        if len(stat_segs)>=3 and all(s.strip().isdigit() for s in stat_segs[:3]):
            receptions = int(stat_segs[0].strip())
        else:
            receptions = None

    # 提取码数
    yard_pat = re.search(r'(\d+)\s*scrim yards', stat_str)
    if yard_pat:
        yards = int(yard_pat.group(1))
    else:
        stat_segs = stat_str.split('/')
        if len(stat_segs)>=2 and stat_segs[1].strip().isdigit():
            yards = int(stat_segs[1].strip())
        elif len(stat_segs)>=1 and stat_segs[0].strip().isdigit():
            yards = int(stat_segs[0].strip())
        else:
            yards = None

    # 提取达阵数
    td_pat = re.search(r'(\d+)\s*(TD|TDs)', stat_str)
    if td_pat:
        tds = int(td_pat.group(1))
    else:
        stat_segs = stat_str.split('/')
        if len(stat_segs)>=3 and stat_segs[2].strip().isdigit():
            tds = int(stat_segs[2].strip())
        else:
            tds = None

    return {
        "球员姓名": player_name,
        "接球数": receptions,
        "码数": yards,
        "达阵数": tds
    }

# 解析所有球员数据生成DataFrame
parsed_result = [parse_player_stat(line) for line in player_lines if parse_player_stat(line)]
df = pd.DataFrame(parsed_result)

# 输出查看结果
print(df)

扩展说明

如果你的原始数据中存在其他格式的统计项,只需在解析函数中补充对应正则匹配规则即可适配,冲球数、抄截数等额外字段也可以用相同逻辑提取。

内容的提问来源于stack exchange,提问作者Nicholas O'Callaghan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:48:03