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

如何从ESPN API生成的字典数据创建规范的.csv文件?

将NFL赛事字典数据转为CSV(Pandas实现及优化方案)

先修正原代码的小问题

你的代码里event_short_name = ["shortName"]是笔误,应该改为event_short_name = game["shortName"],否则这个字段会存成固定列表["shortName"],无法获取到赛事的简称。


方法一:用Pandas转换现有嵌套字典

你的data是多层嵌套结构(Week -> Game -> 字段),而机器学习需要扁平的表格数据(每行对应一场比赛),所以第一步要把嵌套字典展开:

import pandas as pd

# 展开嵌套字典为扁平列表
flat_data = []
for week_name, games in data.items():
    # 提取周数,比如"Week 1"转为1
    week_num = int(week_name.split()[1])
    for game_name, game_info in games.items():
        # 给单场比赛数据加上周数字段
        game_row = {
            "Week": week_num,
            **game_info  # 展开原有的赛事字段
        }
        flat_data.append(game_row)

# 转为DataFrame
df = pd.DataFrame(flat_data)

# 导出为CSV
df.to_csv("nfl_2022_games.csv", index=False)

这样导出的CSV每行对应一场比赛,包含Week、Event Name、Short Name、Date、Winner字段,完全符合机器学习的输入要求。


方法二:更简便的爬取+转换流程

你现在的流程是先构建嵌套字典再展开,其实可以在爬取阶段直接构建扁平数据,省去后续展开的步骤,效率更高:

修改爬取代码,直接收集单场比赛的信息到列表:

import requests
import pandas as pd

root_link = "http://sports.core.api.espn.com/v2/sports/football/leagues/nfl/seasons/2022/types/2/weeks?lang=en&region=us"
response1 = requests.get(url=root_link)
weeks = response1.json()

# 初始化扁平数据列表
flat_data = []

for i in range(16):
    print(f"========= WEEK {i + 1}/16 =========")
    week_link = weeks["items"][i]["$ref"]

    response2 = requests.get(url=week_link)
    week_data = response2.json()
    get_events = week_data["events"]["$ref"]
    
    response3 = requests.get(url=get_events)
    week_games = response3.json()
    
    for j in range(len(week_games["items"])):
        game_link = week_games["items"][j]["$ref"]
        response4 = requests.get(url=game_link)
        game = response4.json()
        
        event_name = game["name"]
        event_date = game["date"]
        # 修正笔误
        event_short_name = game["shortName"]
        
        # 判断获胜队伍
        competitors = game["competitions"][0]["competitors"]
        winner_competitor = competitors[0] if competitors[0]["winner"] else competitors[1]
        winner_link = winner_competitor["team"]["$ref"]
        
        response5 = requests.get(url=winner_link)
        winner_data = response5.json()
        winner = winner_data["displayName"]
        
        # 直接添加到扁平列表,带上周数
        flat_data.append({
            "Week": i + 1,
            "Event Name": event_name,
            "Short Name": event_short_name,
            "Date": event_date,
            "Winner": winner
        })
        print(f"FINISHED FOR GAME {j + 1}/{len(week_games['items'])}")

# 直接转DataFrame并导出
df = pd.DataFrame(flat_data)
df.to_csv("nfl_2022_games.csv", index=False)

这种方式不需要先构建多层嵌套字典,爬取的同时就生成了符合CSV格式要求的结构化数据,代码更简洁,内存占用也更低。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:50:23