如何将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())
关键说明
节点定位:
数据嵌套在data->groups->subgroups->stats路径下,groups[0]对应"Game Stats"分组,subgroups[0]是具体统计项集合。表头与数据匹配:
columns数组存储表头定义,header是显示缩写(如GP),name是原始字段名(如GamesPlayed),按需选择。- 球员统计值通常在
stats下的rows数组中,若键名不符,打印stats_data.keys()确认实际键名。
数据类型转换:
利用columnType标记(0代表数值型),批量将字符串格式的统计值转为数值类型,方便后续可视化分析。
内容的提问来源于stack exchange,提问作者Caleb Kim
相关产品推荐
相关产品推荐

