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

如何将MaxPreps爬取的JSON数据转换为规整DataFrame

解决MaxPreps篮球数据规整为DataFrame的方案

核心思路

MaxPreps返回的JSON采用嵌套分组结构,直接用json_normalize处理整个对象会导致结构混乱。需要先定位到球员统计数据的核心节点,分别提取表头和球员数据,再组合成规整的DataFrame。

完整代码

import pandas as pd
import requests

pd.set_option('display.max_columns', None)

# 请求数据
test_url = 'https://production.api.maxpreps.com/gatewayweb/react/team-season-player-stats/rollup/v1?teamId=cb3c4816-4749-4381-8c4c-5613ef8c89c9&sportSeasonId=77be7c75-cdf9-483d-867f-ea2af557e731'
url_json = requests.get(url=test_url).json()

# 定位统计数据核心节点
stats_data = url_json['data']['groups'][0]['subgroups'][0]['stats']

# 提取表头:用header(如GP、MPG)对齐NBA官网风格
headers = [col['header'] for col in stats_data['columns']]
# 若需要原始字段名(如GamesPlayed),替换为:headers = [col['name'] for col in stats_data['columns']]

# 提取球员数据:API中通常用rows存储球员统计数组(若键名不同,打印stats_data.keys()确认)
player_rows = stats_data['rows']

# 构建DataFrame
df = pd.DataFrame(player_rows, columns=headers)

# 批量转换数值类型(API返回多为字符串)
numeric_cols = [col['header'] for col in stats_data['columns'] if col['columnType'] == 0]
df[numeric_cols] = df[numeric_cols].apply(pd.to_numeric, errors='coerce')

print(df.head())

关键说明

  1. 节点定位:
    数据嵌套在data->groups->subgroups->stats路径下,groups[0]对应"Game Stats"分组,subgroups[0]是具体统计项集合。

  2. 表头与数据匹配:

    • columns数组存储表头定义,header是显示缩写(如GP),name是原始字段名(如GamesPlayed),按需选择。
    • 球员统计值通常在stats下的rows数组中,若键名不符,打印stats_data.keys()确认实际键名。
  3. 数据类型转换:
    利用columnType标记(0代表数值型),批量将字符串格式的统计值转为数值类型,方便后续可视化分析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:01:13