如何将pandas DataFrame导出Excel并实现指定列的合并功能
实现pandas导出Excel列合并的解决方法
你之前的写法报错是因为Python原生字典不允许重复键,赋值时后定义的同键值会直接覆盖前面的内容,无法构造出需要的多列结构。要实现列合并的导出效果,有两种常用方案:
方案1:使用MultiIndex多层列索引
pandas原生支持多层列索引,导出Excel时默认会自动合并同层级的重复表头单元格,适合层级规则统一的场景:
import pandas as pd # 构造多层列索引,第一层级为合并显示的动物分类,第二层级为子列标识 columns = pd.MultiIndex.from_tuples( [ ("", "animal"), ("horse", "color_1"), ("horse", "color_2"), ("dog", "color_1"), ("dog", "color_2"), ] ) # 构造对应数据 data = [["color of fur", "black", "white", "grey", "black"]] df = pd.DataFrame(data, columns=columns) # 导出Excel,默认merge_cells=True会自动合并同层级重复列头 df.to_excel("output.xlsx", index=False)
方案2:导出后手动操作Excel单元格合并
如果需要更灵活的合并规则,可导出普通DataFrame后用openpyxl手动合并指定单元格:
import pandas as pd from openpyxl import load_workbook from openpyxl.styles import Alignment # 构造普通结构的DataFrame df = pd.DataFrame({ "animal": ["color of fur"], "col1": ["black"], "col2": ["white"], "col3": ["grey"], "col4": ["black"] }) # 首次导出基础数据 df.to_excel("output.xlsx", index=False) # 加载文件操作单元格 wb = load_workbook("output.xlsx") ws = wb.active # 合并第一行的B1-C1单元格设置为horse ws.merge_cells("B1:C1") ws["B1"] = "horse" # 合并第一行的D1-E1单元格设置为dog ws.merge_cells("D1:E1") ws["D1"] = "dog" # 合并单元格设置居中对齐 for cell in ["B1", "D1"]: ws[cell].alignment = Alignment(horizontal="center", vertical="center") # 保存修改后的文件 wb.save("output.xlsx")
两种方案均可实现预期的列合并效果:多层索引方案适配规则化的多层级表头场景,无需手动计算合并坐标;手动合并方案适配自定义程度高的特殊场景,可灵活控制合并范围。
内容的提问来源于stack exchange,提问作者Egelbets
相关产品推荐
相关产品推荐

