如何解析嵌套JSON并将所有字段展开为DataFrame?
解决嵌套JSON展开为DataFrame的问题
一、继续处理已有的df3展开results字段
你可以通过pd.json_normalize解析results列的嵌套结构,再与原表合并,最后展开values字段:
# 解析results列中的嵌套数据 results_parsed = pd.json_normalize(df3['results']) # 将解析结果与原表合并,移除原results列 df4 = pd.concat([df3.drop('results', axis=1), results_parsed], axis=1) # 展开values字段内的键值对,生成单独列 final_df = pd.concat([df4.drop('values', axis=1), df4['values'].apply(pd.Series)], axis=1)
执行后final_df会将requestedId、height、distance等所有嵌套键转为单独列,和其他字段并列展示。
二、一步到位展开所有嵌套列的方法
无需分步处理,直接利用pd.json_normalize的多层路径参数,从原始JSON字典直接生成完全展开的DataFrame:
final_df = pd.json_normalize( json_dict, # 指定最深层的数组路径:先展开items数组,再展开每个item下的results数组 record_path=["items", "results"], # 指定需要保留的上层元数据,包括嵌套的address信息 meta=[ "requestId", "processingTimeInMilliseconds", ["items", "address", "countryCode"], ["items", "address", "id"] ], # 设置嵌套字段的分隔符,便于区分层级 sep="." ) # 最后展开values字段的内容 final_df = pd.concat([final_df.drop('values', axis=1), final_df['values'].apply(pd.Series)], axis=1)
这样就能直接把JSON中所有层级的键都转为DataFrame的列,实现你的目标。如果values中的键不固定(比如有的条目是height,有的是distance),apply(pd.Series)会自动为缺失的键填充NaN,不影响整体结构。
内容的提问来源于stack exchange,提问作者Malo
相关产品推荐
相关产品推荐

