如何使用Python将嵌套结构数据转换为指定格式的Excel表格
解决方案
实现思路
- 先将嵌套结构的原始数据集扁平化,每一行对应一组二级分类的完整数据
- 借助pandas生成标准表格结构,使用openpyxl处理相同一级分类的单元格合并,最终输出符合要求的Excel文件
依赖安装
运行前先执行命令安装所需库:pip install pandas openpyxl
完整可运行代码
import pandas as pd from openpyxl import load_workbook # ---------------------- 替换为你的实际数据 ---------------------- raw_data = [ "Name1 : Name1 - {'Name1.1': ('data1', 'data2', 'data3'), 'Name1.2': ('data1', 'data2', 'data3')}", "Name2 : Name2 - {'Name2.1': ('data1', 'data2', 'data3')}", "Name3 : Name3 - {'Name3.1': ('data1', 'data2', 'data3'), 'Name3.2': ('data1', 'data2', 'data3'), 'Name3.3': ('data1', 'data2', 'data3')}" ] # ------------------------------------------------------------- # 1. 解析原始数据,生成扁平化表格 flat_data = [] for line in raw_data: # 拆分一级分类和后续字典内容 first_level, dict_part = line.split(" - ", 1) first_level_name = first_level.split(" : ")[0].strip() # 把字典字符串转成实际字典对象 second_level_dict = eval(dict_part) # 遍历二级分类生成行数据 for second_level_name, data_tuple in second_level_dict.items(): flat_data.append([ first_level_name, second_level_name, data_tuple[0], data_tuple[1], data_tuple[2] ]) # 2. 生成DataFrame,设置列名 df = pd.DataFrame(flat_data, columns=["一级分类", "二级分类", "数据1", "数据2", "数据3"]) # 3. 写入Excel文件 output_path = "转换结果.xlsx" df.to_excel(output_path, index=False, engine="openpyxl") # 4. 处理一级分类列的单元格合并 wb = load_workbook(output_path) ws = wb.active # 统计每个一级分类的起始行和结束行(Excel行号从2开始,因为第1行是表头) current_first_level = ws.cell(row=2, column=1).value start_row = 2 for row in range(3, ws.max_row + 1): cell_value = ws.cell(row=row, column=1).value if cell_value != current_first_level: # 不是同一个一级分类,合并前面的区间 if start_row < row - 1: ws.merge_cells(start_row=start_row, start_column=1, end_row=row-1, end_column=1) current_first_level = cell_value start_row = row # 处理最后一个一级分类的合并 if start_row < ws.max_row: ws.merge_cells(start_row=start_row, start_column=1, end_row=ws.max_row, end_column=1) # 保存修改后的Excel wb.save(output_path) print(f"转换完成,文件已保存至{output_path}")
注意事项
- 如果你的原始数据是从文件读取的,可以把raw_data替换为文件读取的每行内容即可
- 如果你的数据列数不止3个,修改DataFrame的列名,以及遍历data_tuple的逻辑即可
- 代码中使用eval转换字典字符串,确保你的原始数据格式和示例一致即可
内容的提问来源于stack exchange,提问作者nazzlire
相关产品推荐
相关产品推荐

