如何从含字典的三层嵌套JSON生成指定格式的pandas DataFrame
解决方案
你的问题核心是调用json_normalize时没有指定record_path参数,导致嵌套的分组数组没有被展开,仅作为整体存储。以下是两种目标格式的实现方法:
格式1:展开多行
直接通过json_normalize的路径参数关联外层id和内层分组数据:
import pandas as pd import json path = 'mypath' with open(path, 'r', encoding='utf-8') as f: data = json.load(f) # 展开嵌套数组 df_expand = pd.json_normalize( data=data['data'], record_path=['groups', 'data'], # 指定嵌套数组的层级路径 meta=['id'], # 保留外层的id字段,关联到每个分组记录 errors='ignore' ) # 统一分组名字段(如果你的实际数据中键名统一都是group或group_name,可省略这一步) df_expand['group'] = df_expand['group'].fillna(df_expand['group_name']) df_expand = df_expand.drop(columns=['group_name']) # 调整列顺序得到最终结果 df_format1 = df_expand[['id', 'group', 'year_joined']]
格式2:单行聚合
在格式1的结果基础上按id分组聚合即可:
df_format2 = df_format1.groupby('id', as_index=False).agg( group=('group', ','.join), year_joined=('year_joined', ','.join) )
上述方法都是pandas内置的矢量化操作,处理大数据集的效率远高于手动循环遍历。
内容的提问来源于stack exchange,提问作者Towelie
相关产品推荐
相关产品推荐

