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

如何将API获取的棒球赛事统计数据转为Pandas DataFrame?

解决Pandas转换API数据到DataFrame的长度不匹配问题

问题背景

从API获取三组键值对数据:summary["awayBattingTotals"]、summary["homeBattingTotals"]、summary["teamInfo"],具体数据如下:

# awayBattingTotals
{'namefield': 'Totals',
  'ab': '33',
  'r': '2',
  'h': '7',
  'hr': '1',
  'rbi': '2',
  'bb': '0',
  'k': '8',
  'lob': '13',
  'avg': '',
  'ops': '',
  'obp': '',
  'slg': '',
  'name': 'Totals',
  'position': '',
  'note': '',
  'substitution': False,
  'battingOrder': '',
  'personId': 0}

# homeBattingTotals
{'namefield': 'Totals',
  'ab': '34',
  'r': '4',
  'h': '9',
  'hr': '2',
  'rbi': '4',
  'bb': '1',
  'k': '7',
  'lob': '13',
  'avg': '',
  'ops': '',
  'obp': '',
  'slg': '',
  'name': 'Totals',
  'position': '',
  'note': '',
  'substitution': False,
  'battingOrder': '',
  'personId': 0}

# teamInfo
{'away': {'id': 145,
   'abbreviation': 'CWS',
   'teamName': 'White Sox',
   'shortName': 'Chi White Sox'},
  'home': {'id': 118,
   'abbreviation': 'KC',
   'teamName': 'Royals',
   'shortName': 'Kansas City'}}

执行pd.DataFrame.from_dict(summary)时触发错误:ValueError: All arrays must be of the same length

错误原因

summary包含三种不同结构的数据:前两个是单条击球统计字典,第三个是嵌套的主客场队信息字典。直接用from_dict转换时,Pandas会尝试将每个键作为列,但不同字典的键对应的值长度不统一,导致报错。

解决方法

步骤1:整合击球统计数据并关联球队信息

将客场、主场的击球统计数据添加球队标识后,合并为统一列表再转换为DataFrame:

import pandas as pd

# 提取三组数据
away_batting = summary["awayBattingTotals"]
home_batting = summary["homeBattingTotals"]
team_info = summary["teamInfo"]

# 给客场统计添加球队属性
away_batting.update({
    "team_type": "away",
    "team_abbr": team_info["away"]["abbreviation"],
    "team_name": team_info["away"]["teamName"]
})

# 给主场统计添加球队属性
home_batting.update({
    "team_type": "home",
    "team_abbr": team_info["home"]["abbreviation"],
    "team_name": team_info["home"]["teamName"]
})

# 转换为DataFrame
batting_stats_df = pd.DataFrame([away_batting, home_batting])

步骤2:单独生成球队信息DataFrame(可选)

如果需要单独存储球队信息,可以将teamInfo转换为以球队类型为索引的DataFrame:

team_info_df = pd.DataFrame.from_dict(team_info, orient="index")

效果说明

处理后的数据结构统一,Pandas可以正确识别每一行的统计记录,同时关联了对应的球队信息,避免了长度不匹配的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 02:06:34