将Pandas DataFrame转换为含嵌套数组的JSON格式遇阻求助
解决DataFrame转嵌套JSON格式问题
你的核心问题是没能把DataFrame按type层级分组,且details列生成的是无键名的列表而非带id/value的字典结构。下面是针对性的修正方案:
完整修正代码
import pandas as pd import json # 读取Excel,注意:如果type列是第一列,保留index_col=[0];否则去掉该参数 df = pd.read_excel("/Colours.xlsx", sheet_name='Colour', index_col=[0]) # 把id和value包装成带键名的字典,value转成字符串匹配目标格式 df['details'] = df.apply(lambda x: {'id': x['id'], 'value': str(x['value'])}, axis=1) # 按type、colour、code分组,聚合details为列表 df_grouped = df.groupby(["type", "colour", "code"])['details'].agg(list).reset_index() # 构建每个颜色对应的完整对象 df_grouped['colour_item'] = df_grouped.apply( lambda x: { 'colour': x['colour'], 'code': x['code'], 'details': x['details'] }, axis=1 ) # 按type分组,把同类型的颜色对象聚合为列表 type_groups = df_grouped.groupby('type')['colour_item'].agg(list).to_dict() # 包装成目标JSON结构 final_result = {'types': [type_groups]} # 输出格式化后的JSON print(json.dumps(final_result, indent=2))
关键修正点
- 重构details列:把原来的
[id, value]列表改成{'id': id, 'value': value}字典,保留键名匹配目标格式; - 双层分组逻辑:先按
type+colour+code聚合details,再按type把同类型的颜色对象整合为数组; - 格式对齐:用
json.dumps的indent参数生成格式化的JSON,和你期望的结构完全一致。
运行后会生成你需要的嵌套JSON结构:
{ "types": [ { "A": [ { "colour": "RED", "code": "R", "details": [ { "id": "11a", "value": "166.23" }, { "id": "12b", "value": "999.99" } ] }, { "colour": "BLUE", "code": "B", "details": [ { "id": "44a", "value": "12.33" } ] } ], "B": [ { "colour": "RED", "code": "R", "details": [ { "id": "66y", "value": "12345.00" } ] } ] } ] }
内容的提问来源于stack exchange,提问作者Molly
相关产品推荐
相关产品推荐

