如何从JSON提取特征并规整为行列结构?Python Pandas实操问题
解决JSON归一化到DataFrame列的问题
核心问题
你两次归一化的操作逻辑有误,导致最终DataFrame里的id、name等字段并非直接作为列存在,而是嵌套在单元格的字典中,所以调用explode('id')会触发KeyError。
最简单的归一化方法
根据你提供的my_list结构,分两种情况处理:
情况1:每个response是完整的车辆字典(如你给出的{'id': '21201', 'name': ..., 'externalIds': ...})
直接对my_list做一次归一化即可,自动将顶层字段和嵌套字段展开为列:
import pandas as pd from pandas import json_normalize df_vehicles = json_normalize(my_list)
处理后:
id、name会直接成为DataFrame的列- 嵌套的
externalIds.serial会生成对应的列名 gps列保留为列表类型(若需展开gps的内容,可参考下方补充操作)
情况2:每个response包含data字段(即response = {'data': [车辆字典列表]})
先提取所有data中的车辆字典,再做归一化:
# 先合并所有data里的字典列表 all_vehicle_data = [] for item in df_vehicles['data']: all_vehicle_data.extend(item) # 归一化合并后的列表 df_final = json_normalize(all_vehicle_data)
或者用更简洁的写法:
df_final = json_normalize(df_vehicles['data'].explode().tolist())
补充:展开GPS嵌套数据
如果需要把gps字段里的时间、经纬度等也展开为列,可以先explode再归一化:
# 先展开gps列表为单独行 df_exploded = df_vehicles.explode('gps', ignore_index=True) # 归一化所有字段(包括gps里的嵌套内容) df_full = json_normalize(df_exploded.to_dict('records'))
内容的提问来源于stack exchange,提问作者ASH
相关产品推荐
相关产品推荐

