如何将Pandas DataFrame转换为指定嵌套结构的JSON格式
Pandas DataFrame转换为指定嵌套结构JSON的实现方案
你需要的嵌套结构本质是按指定列顺序逐层分组,最后一层聚合对应值为列表,Pandas原生to_dict方法没有直接支持该场景的参数,可通过分组配合自定义嵌套逻辑实现,以下是两种可行方案:
方案1:通用递归实现(适配动态列场景)
该方案不需要硬编码列名,只要调整nest_level_cols的列顺序就能生成对应层级的嵌套结构,适配性更强:
import pandas as pd data = { 'alt' : ["BeattheBeachmark NEW", "BeattheBeachmark NEW"], 'Mod' : ["GA", "GA"], 'Pers' : ["Movment", "Movment"], 'Vie' : ["Inprogress", "Inprogress"], 'Actions' : ["Clear", "Add"] } df = pd.DataFrame(data) # 定义嵌套层级的列顺序(从前到后对应嵌套从外到内),最后一列为值列 nest_level_cols = df.columns[:-1].tolist() value_col = df.columns[-1] def generate_nested(group_df, level_cols, val_col): current_level = level_cols[0] # 递归到最后一层时直接聚合值为列表 if len(level_cols) == 1: return { current_level: group_df.groupby(current_level, sort=False)[val_col].apply(list).to_dict() } # 非最后一层递归生成下一级嵌套 nested_dict = {} for group_val, sub_df in group_df.groupby(current_level, sort=False): nested_dict[group_val] = generate_nested(sub_df, level_cols[1:], val_col) return {current_level: nested_dict} result = generate_nested(df, nest_level_cols, value_col)
方案2:硬编码层级实现(适配固定列场景)
如果你的列数量和顺序永远固定,可以直接用多层推导式实现,逻辑更直观:
result = { "alt": { alt_val: { "Mod": { mod_val: { "Pers": { pers_val: { "Vie": { vie_val: { "Actions": sub_df["Actions"].tolist() } } } for pers_val, sub_df in mod_group.groupby("Pers", sort=False) } } for mod_val, mod_group in alt_group.groupby("Mod", sort=False) } } for alt_val, alt_group in df.groupby("alt", sort=False) } }
注意事项
- 代码中
sort=False用于保证分组后的键顺序和原始数据中出现的顺序一致,若需要按键的字典序排序,删除该参数即可。 - 若最后一列的聚合结果需要去重,可将
.tolist()替换为.unique().tolist()。 - 生成的
result可以直接用json.dumps(result)转换为标准JSON字符串。
内容的提问来源于stack exchange,提问作者Flo Cp
相关产品推荐
相关产品推荐

