使用Pandas提取JSON中transportEvents时报错,求排查与解决方案
解决Pandas提取嵌套JSON中transportEvents字段的错误
问题根源
你的JSON结构中,transportEvents是嵌套在event对象下的二级字段,但原代码直接从顶层DataFrame中查找该字段,导致json_normalize无法定位到目标数据,触发错误。
修正方案
需要先提取出所有嵌套在event下的transportEvents列表,再进行归一化处理,以下是两种可行的实现方式:
方式一:使用JSON模块先提取目标数据
import pandas as pd import json from pandas import json_normalize ruta_archivo_json = 'response_1660310720193.json' # 读取并解析JSON文件 with open(ruta_archivo_json, 'r', encoding='utf-8') as f: raw_data = json.load(f) # 遍历提取所有transportEvents条目 transport_events_list = [] for entry in raw_data: transport_events_list.extend(entry['event']['transportEvents']) # 将列表归一化为DataFrame df = json_normalize(transport_events_list) print(df) df.head(10)
方式二:使用Pandas链式操作处理嵌套字段
import pandas as pd ruta_archivo_json = 'response_1660310720193.json' # 读取JSON为DataFrame df_raw = pd.read_json(ruta_archivo_json) # 展开event字段、拆分transportEvents数组并转为结构化DataFrame df = df_raw['event'].apply(pd.Series)['transportEvents'].explode().apply(pd.Series) print(df) df.head(10)
后续上传BigQuery
得到结构化DataFrame后,可直接使用Pandas的to_gbq方法上传(需提前完成BigQuery认证配置):
df.to_gbq( destination_table='your_project.your_dataset.your_table', project_id='your_project_id', if_exists='replace' # 根据需求选择append/replace/fail )
内容的提问来源于stack exchange,提问作者Diego Agustin Acevedo
相关产品推荐
相关产品推荐

