MLB JSON数据处理:如何访问嵌套列表中字典的runner id值?
解决MLB JSON数据中提取Runner ID的问题
错误原因
你遇到的报错是因为play['runners']是数组(列表)类型(JSON里的方括号[]表示数组),而你试图用字符串'details'作为索引访问数组,数组仅支持整数索引或切片,因此触发错误。
解决方法
方法1:手动嵌套循环提取
修正循环逻辑,遍历runners数组中的每个条目,再逐层访问嵌套字段:
import pandas as pd data = [] plays = j['liveData']['plays']['allPlays'] for play in plays: # 遍历当前play下的所有runner条目 for runner_item in play['runners']: # 逐层提取runner的id runner_id = runner_item['details']['runner']['id'] data.append(runner_id) # 转换为DataFrame df = pd.DataFrame(data, columns=['runner_id'])
方法2:用json_normalize高效提取
利用pandas.json_normalize的record_path参数直接指定嵌套数组的提取路径,无需手动循环:
import pandas as pd # 提取runner的核心字段,同时可附加关联元数据 df = pd.json_normalize( j['liveData']['plays']['allPlays'], # 指定要展开的嵌套数组路径:runners -> details -> runner record_path=['runners', 'details', 'runner'], # 可选:提取其他关联字段作为元数据列 meta=[ ['runners', 'details', 'event'], ['runners', 'details', 'playIndex'] ] ) # 最终df包含id、fullName,以及指定的event、playIndex字段
内容的提问来源于stack exchange,提问作者David
相关产品推荐
相关产品推荐

