如何将嵌套JSON转换为Pandas DataFrame?是否需循环处理?
实现方法:无需手动循环,用Pandas内置函数即可转换
首先要注意:你提供的原始JSON存在语法错误(比如未用引号包裹的键、缺失逗号),需要先修正为合法JSON格式(示例见下方代码块),否则Pandas无法正常解析。
步骤1:修正原始JSON为合法格式
{ "id": 1, "job": { "name": "g", "documents": [ { "name": "a.pdf", "pages": [ { "detail": "page_detail_a", "notes": [ { "note": "note_a", "references": [ { "detail_a_a": ".....", "detail_a_n": "....." } ] } ] } ] }, { "name": "b.pdf", "pages": [ { "detail": "page_detail_b", "notes": [ { "note": "note_b", "references": [ { "detail_b_a": ".....", "detail_b_n": "....." } ] } ] } ] } ] } }
步骤2:用json_normalize展开嵌套结构
使用Pandas的json_normalize函数,指定嵌套层级的record_path和需要保留的元数据列,一次性展开所有嵌套数组:
import pandas as pd # 假设修正后的JSON数据存储在data变量中 df = pd.json_normalize( data, # 指定最内层数组的路径:job→documents→pages→notes→references record_path=['job', 'documents', 'pages', 'notes', 'references'], # 指定需要保留的上层元数据列 meta=[ 'id', ['job', 'name'], ['job', 'documents', 'name'], ['job', 'documents', 'pages', 'detail'] ] )
步骤3:重塑数据到目标格式
通过rename调整列名匹配目标格式,再用melt函数将横向的reference字段转为纵向行:
# 重命名列,对齐目标格式 df = df.rename(columns={ 'id': 'job', 'job.name': 'name', 'job.documents.name': 'document.name', 'job.documents.pages.detail': 'page.detail' }) # 将所有reference字段转为行 final_df = df.melt( id_vars=['job', 'name', 'document.name', 'page.detail'], var_name='reference' # 对应目标格式的reference列 ) # 保留需要的列 final_df = final_df[['job', 'name', 'document.name', 'page.detail', 'reference']]
执行完以上步骤后,final_df就是你需要的目标格式DataFrame,全程无需手动循环遍历JSON结构。
内容的提问来源于stack exchange,提问作者Tlaloc-ES
相关产品推荐
相关产品推荐

