如何将含多维数组的JSON转换为展开的Pandas DataFrame
解决嵌套JSON数组展开为DataFrame列的问题
针对你遇到的sancoes嵌套数组无法展开的问题,有两种直接可行的处理方式:
方法一:直接用pd.json_normalize处理JSON数据
json_normalize是Pandas专门为嵌套JSON设计的工具,可以一次性将嵌套字段展开并保留顶层字段,比from_dict更适合你的场景:
import requests import pandas as pd acordo_leniencia = requests.get(url_acordo_leniencia, headers=chave) json_data = acordo_leniencia.json() # 直接解析嵌套JSON,指定要展开的路径和保留的顶层字段 df = pd.json_normalize( json_data, record_path='sancoes', # 指定要展开的嵌套数组字段 meta=['id', 'dataInicioAcordo', 'dataFimAcordo', 'orgaoResponsavel', 'situacaoAcordo', 'quantidade'] # 需要保留的顶层字段 )
生成的df会把sancoes里的每个字段(比如cnpj、razaoSocial)都变成独立列,同时保留原有的id、dataInicioAcordo等字段。
方法二:基于已生成的DataFrame展开
如果已经用from_dict生成了初始df,可以分两步展开嵌套字段:
# 假设已经有初始df df = pd.DataFrame.from_dict(json_data) # 第一步:将sancoes数组拆分为每行对应一个字典(数组含多个元素时自动生成多行) df_exploded = df.explode('sancoes', ignore_index=True) # 第二步:将sancoes列的字典转换为结构化列,再和原表合并 df_sancoes = pd.DataFrame(df_exploded['sancoes'].tolist()) final_df = pd.concat([df_exploded.drop('sancoes', axis=1), df_sancoes], axis=1)
如果sancoes数组里有多个元素,explode会自动为每个元素生成一行,同时复制对应行的顶层字段值,保证数据关联正确。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

