修改parse_data函数将嵌套赛事JSON解析为指定结构pandas DataFrame
问题根因
原代码报错的核心原因是tactics字段下的lineup是存储多名上场球员信息的数组结构,不是单个字典对象,直接按字典键路径访问数组内的player、position字段必然触发类型错误。要实现预期的一行对应一名球员的输出,需要遍历lineup数组的每个元素,复用事件级公共字段生成对应行。
修改后的函数代码
import json import pandas as pd def parse_data(shots): all_events = [] for s in shots: # 保留原有的调试打印逻辑 print(json.dumps(s, sort_keys=True, indent=4)) # 提前提取单条事件的公共字段,该事件下所有球员行复用这些值 common_attrs = { "possession": s['possession'], "possession_team": s['possession_team']['name'], "play_pattern": s['play_pattern']['name'], "formation": s['tactics']['formation'] } # 遍历lineup数组,每个球员生成单独一行数据 for player_item in s['tactics']['lineup']: row = common_attrs.copy() row["player_name"] = player_item['player']['name'] row["player_position"] = player_item['position']['name'] all_events.append(row) return pd.DataFrame(all_events)
逻辑说明
- 单条事件先提取公共属性,避免重复编写相同取值的字段提取逻辑
- 嵌套遍历lineup数组的每个球员条目,单独提取球员姓名、位置信息
- 公共属性拷贝后和球员专属字段合并为一行,保证事件级字段在所有对应球员行中复用
- 所有条目收集完成后转换为DataFrame返回,输出结构和预期完全一致:单事件下每名球员单独占一行,字段顺序、取值完全匹配要求的样例结构。
内容的提问来源于stack exchange,提问作者dfahsjdahfsudaf
相关产品推荐
相关产品推荐

