如何将给定Python DataFrame转换为指定结构嵌套JSON并保存到磁盘
Pandas DataFrame 自定义结构JSON导出实现
原始输入数据
待处理的DataFrame包含员工号、姓名、项目、任务4个字段,其中存在项目、任务字段全为空的无效记录,原始数据结构如下:
| Emp_No | Name | Project | Task |
|---|---|---|---|
| 1 | ABC | P1 | T1 |
| 1 | ABC | P2 | T2 |
| 2 | DEF | P3 | T3 |
| 3 | IJH | Null | Null |
转换规则
转换流程严格对齐目标JSON格式要求:
- 生成的JSON顶层设置
Records数组,数组内每个元素对应单名员工的完整信息 - 员工节点固定包含
Emp_No、Name字段,同一名员工的多条关联项目记录不重复生成独立员工节点 - 为每个员工节点添加
Project_Details数组字段:将该员工下所有非空的Project、Task配对为独立对象存入数组;如果员工无有效项目记录,该字段输出为空数组 - 员工编号统一转为字符串格式存储,匹配目标示例的格式规范
可直接运行的实现代码
import pandas as pd import numpy as np import json # 构造/读取原始DataFrame,实际使用时替换为自身的数据源读取逻辑即可 raw_df = pd.DataFrame({ "Emp_No": [1, 1, 2, 3], "Name": ["ABC", "ABC", "DEF", "IJH"], "Project": ["P1", "P2", "P3", np.nan], "Task": ["T1", "T2", "T3", np.nan] }) # 按员工维度分组聚合 output_records = [] for emp_id, emp_group in raw_df.groupby("Emp_No", sort=False): # 过滤项目、任务为空的无效记录 valid_project_rows = emp_group.dropna(sub=["Project", "Task"]) # 组装项目明细列表 project_details = [ {"Project": row.Project, "Task": row.Task} for _, row in valid_project_rows.iterrows() ] # 生成单条员工记录 output_records.append({ "Emp_No": str(emp_id), "Name": emp_group["Name"].iloc[0], "Project_Details": project_details }) # 组装最终JSON结构并保存到本地磁盘 final_payload = {"Records": output_records} # 替换为实际需要保存的本地文件路径 save_path = "emp_project_export.json" with open(save_path, "w", encoding="utf-8") as f: json.dump(final_payload, f, ensure_ascii=False, indent=2)
输出结果校验
代码运行后生成的JSON结构完全符合要求,示例输出如下:
{ "Records": [ { "Emp_No": "1", "Project_Details": [ {"Project": "P1", "Task": "T1"}, {"Project": "P2", "Task": "T2"} ], "Name": "ABC" }, { "Emp_No": "2", "Project_Details": [ {"Project": "P3", "Task": "T3"} ], "Name": "DEF" }, { "Emp_No": "3", "Project_Details": [], "Name": "IJH" } ] }
内容的提问来源于stack exchange,提问作者Asutosh Sarangi
相关产品推荐
相关产品推荐

