Python 将多个DataFrame合并到一个Excel工作表的sheet中有几种方法

news/2025/10/17 9:06:36/文章来源:https://www.cnblogs.com/onelikeone/p/19146960

 

在Python中,将多个DataFrame合并到一个Excel工作表的sheet中有几种方法。以下是常见的几种实现方式:

方法1:直接合并DataFrame后保存

import pandas as pd# 示例数据
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
df3 = pd.DataFrame({'E': [13, 14, 15], 'F': [16, 17, 18]})# 方法1.1:纵向合并(行合并)
result = pd.concat([df1, df2, df3], axis=0)  # axis=0 按行合并
result.to_excel('merged_vertical.xlsx', index=False, sheet_name='Merged_Data')# 方法1.2:横向合并(列合并)
result = pd.concat([df1, df2, df3], axis=1)  # axis=1 按列合并
result.to_excel('merged_horizontal.xlsx', index=False, sheet_name='Merged_Data')

实践:

image

merged_vertical.xlsx 文件:

image

 

merged_horizontal.xlsx文件:

image

 

 

方法2:使用ExcelWriter进行更灵活的控制

import pandas as pd
from openpyxl import load_workbook
from openpyxl.utils.dataframe import dataframe_to_rows# 示例数据
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
df3 = pd.DataFrame({'E': [13, 14, 15], 'F': [16, 17, 18]})# 创建一个新的Excel文件
with pd.ExcelWriter('merged_data.xlsx', engine='openpyxl') as writer:# 先写入第一个DataFramedf1.to_excel(writer, sheet_name='Combined', index=False, startrow=0)# 获取当前工作表workbook = writer.bookworksheet = writer.sheets['Combined']# 计算下一个DataFrame的起始位置start_row = len(df1) + 2  # +2是为了在DataFrame之间留一个空行# 写入第二个DataFramedf2.to_excel(writer, sheet_name='Combined', index=False, startrow=start_row)# 更新起始位置start_row += len(df2) + 2# 写入第三个DataFramedf3.to_excel(writer, sheet_name='Combined', index=False, startrow=start_row)

方法3:使用openpyxl直接操作

import pandas as pd
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rowsdef merge_dataframes_to_sheet(dataframes, filename, sheet_name='Merged_Data'):"""将多个DataFrame合并到一个Excel工作表中Parameters:dataframes: list of DataFrames - 要合并的DataFrame列表filename: str - 输出文件名sheet_name: str - 工作表名称"""# 创建工作簿和工作表wb = Workbook()ws = wb.activews.title = sheet_namecurrent_row = 1for i, df in enumerate(dataframes):# 添加DataFrame名称作为标题(可选)if hasattr(df, 'name') and df.name:ws.cell(row=current_row, column=1, value=f"DataFrame: {df.name}")current_row += 1# 写入DataFrame数据for r in dataframe_to_rows(df, index=False, header=True):for c, value in enumerate(r, 1):ws.cell(row=current_row, column=c, value=value)current_row += 1# 在DataFrame之间添加空行(除了最后一个)if i < len(dataframes) - 1:current_row += 1# 保存文件wb.save(filename)# 使用示例
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
df3 = pd.DataFrame({'E': [13, 14, 15], 'F': [16, 17, 18]})merge_dataframes_to_sheet([df1, df2, df3], 'merged_dataframes.xlsx')

方法4:更高级的合并函数

import pandas as pd
from openpyxl import Workbook
from openpyxl.styles import Font, Alignment
from openpyxl.utils.dataframe import dataframe_to_rowsdef advanced_merge_to_sheet(dataframes, filename, sheet_name='Merged_Data', add_titles=True, spacing=1):"""高级合并函数,支持更多自定义选项Parameters:dataframes: list of DataFrames - 要合并的DataFrame列表filename: str - 输出文件名sheet_name: str - 工作表名称add_titles: bool - 是否添加DataFrame标题spacing: int - DataFrame之间的空行数"""wb = Workbook()ws = wb.activews.title = sheet_namecurrent_row = 1for i, df in enumerate(dataframes):# 添加标题if add_titles:title_cell = ws.cell(row=current_row, column=1, value=f"DataFrame {i+1}")title_cell.font = Font(bold=True, size=12)title_cell.alignment = Alignment(horizontal='left')current_row += 1# 写入表头header_row = list(df.columns)for col_idx, header in enumerate(header_row, 1):cell = ws.cell(row=current_row, column=col_idx, value=header)cell.font = Font(bold=True)current_row += 1# 写入数据for _, row in df.iterrows():for col_idx, value in enumerate(row, 1):ws.cell(row=current_row, column=col_idx, value=value)current_row += 1# 添加间距if i < len(dataframes) - 1:current_row += spacing# 自动调整列宽for column in ws.columns:max_length = 0column_letter = column[0].column_letterfor cell in column:try:if len(str(cell.value)) > max_length:max_length = len(str(cell.value))except:passadjusted_width = (max_length + 2)ws.column_dimensions[column_letter].width = adjusted_widthwb.save(filename)# 使用示例
df1 = pd.DataFrame({'姓名': ['张三', '李四', '王五'], '年龄': [25, 30, 35]})
df2 = pd.DataFrame({'城市': ['北京', '上海', '广州'], '工资': [10000, 12000, 9000]})
df3 = pd.DataFrame({'部门': ['技术部', '销售部', '人事部'], '工龄': [3, 5, 2]})advanced_merge_to_sheet([df1, df2, df3], 'advanced_merged.xlsx', add_titles=True, spacing=2)

方法5:使用xlsxwriter引擎

import pandas as pddef merge_with_xlsxwriter(dataframes, filename, sheet_name='Merged_Data'):"""使用xlsxwriter引擎合并DataFrame"""with pd.ExcelWriter(filename, engine='xlsxwriter') as writer:workbook = writer.bookworksheet = workbook.add_worksheet(sheet_name)start_row = 0for i, df in enumerate(dataframes):# 写入DataFramedf.to_excel(writer, sheet_name=sheet_name, startrow=start_row, index=False)# 更新起始行位置start_row += len(df) + 2  # +2 用于表头和空行# 使用示例
df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})merge_with_xlsxwriter([df1, df2], 'xlsxwriter_merged.xlsx')

xlsxwriter_merged.xlsx 文件结果:

image

 

 

选择哪种方法取决于你的具体需求:

  • 方法1:适合简单的行或列合并

  • 方法2:适合需要精确控制位置的情况

  • 方法3:提供最大的灵活性

  • 方法4:适合需要格式化的专业输出

  • 方法5:适合使用xlsxwriter的高级功能

根据你的具体需求选择最合适的方法即可。

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/938645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于ZigBee的无线传感器组网

一、实验设备与工具设备类型 型号/参数 功能说明主控芯片 CC2530F256 集成ZigBee射频与8051内核传感器模块 DHT11温湿度传感器 采集环境参数网关设备 USB-ZigBee适配器 实现PC与ZigBee网络通信开发环境 IAR Embedded W…

2025 涂料供应厂家最新推荐榜:权威品牌测评 + 选购指南,家装工程选品必看

2025 年涂料行业迎来技术迭代与品牌洗牌,消费者对环保性、功能性的需求从基础达标升级为精准适配,零 VOC、净醛抗菌、耐候定制等高端需求占比同比提升 30%。但市场中既有深耕多年的实力企业,也有缺乏核心技术的跟风…

2025 年中走丝线切割源头厂家最新推荐排行榜发布,解读优质厂家技术亮点与选择攻略伺服/高效/自动中走丝线切割厂家推荐

引言当前工业制造领域中,中走丝线切割设备作为模具制造、汽车零部件加工、精密器械生产等关键行业的核心装备,其质量与性能直接决定企业生产效率与产品精度。但市场上源头厂家数量繁杂,实力差距悬殊,部分厂家缺乏核…

2024浙江省省赛决赛wp

rce `<?php echo "get只接受code欧,flag在上一级目录<br>"; $filename = __FILE__; highlight_file($filename); if(isset($_GET[code])){ if (!preg_match(/session_id\(|readfile…

【解决办法】pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败”

一、出现背景 使用marker-pdf报错:pytorch OSError: [WinError 1114] 动态链接库(DLL)初始化例程失败” 二、可能原因及其解决办法 1. dll没有安装或者有问题 用dll修复工具尝试安装修复dll,一些免费的工具,如:金山…

23省赛初赛

23质量比24高我只能说 easy php 简单反序列化__debuginfo()魔术方法打印所需调试信息,反序列化时候执行! 链子如下: BBB::__debuginfo()->CCC::__toString()->AAA::__call() AI运行代码 php EXP: <?php …

2025年苏州保洁服务公司最新权威推荐榜:专业家政与深度清洁口碑优选,覆盖日常保洁、开荒保洁、深度清洁及企业保洁服务

行业背景与发展趋势随着城市化进程加速和生活水平提升,中国保洁服务行业正迎来前所未有的发展机遇。据行业数据显示,2024年中国家政服务市场规模已突破1.5万亿元,年均增长率保持在15%以上。这一增长态势不仅反映了市…

2025 年快速退火炉优质厂家最新推荐榜单:真空 / 半导体 / 晶圆 / 高温 / 桌面 / 半自动 / 全自动 / 芯片 / 硅片 / RTP 设备企业权威评选

引言当前,3C、半导体、光伏、汽车等下游产业高速发展,对快速退火炉的精度、稳定性、节能性等需求持续升级,然而市场上设备厂家数量繁杂,产品质量差异显著,部分企业缺乏核心技术,导致设备性能不稳定,难以满足高精…

2025 年油罐厂家最新推荐榜:sf 双层 / 加油站 / 化工 / 不锈钢 / 地埋 / 卧式 / 立式油罐优质厂商权威盘点,帮您避开选择误区精准选品

当前工业与能源存储领域对油罐的需求持续攀升,然而市场上油罐品牌繁杂,产品质量、技术水平与服务能力差异显著,从小型家用油罐到大型工业储罐,不同场景对油罐的材质、容量、安全性能要求各不相同,消费者在选择时常…

2025 年立体画厂家最新推荐榜单:涵盖 3D 光栅立体画、立体光栅卡、3D 装饰立体画、三维立体画,助企业与消费者精准挑选优质品牌

当前,立体画行业发展迅猛,市场上产品种类日益丰富,涵盖 3D 光栅立体画、立体光栅卡等多个品类,但同时也面临品牌杂乱、质量参差不齐的问题。企业在广告宣传、产品包装等场景选择立体画时,难以辨别品牌优劣;消费者…

2025 最新高低温试验箱厂家推荐榜:优质厂家推荐,含恒温恒湿设备供应商核心实力解析

高低温试验箱作为工业研发与质量检测的核心设备,其性能直接关系到电子、汽车、航空航天等关键领域的产品可靠性。2025 年环境试验设备市场竞争加剧,品牌数量激增但实力参差不齐,部分企业因技术匮乏导致设备精度不足…

Luogu P10027 梦境世界 题解 [ 蓝 ] [ 多维 DP ]

梦境世界:可爱 DP 题。 一种常见的假做法是在 DP 的过程中记录路径的前驱进行转移,这种做法错误的原因并不在于转移存在环,它其实就是一张 DAG,但是这种状态表示方式并不能推导出前驱的前驱是谁,所以才是假的。 考…

winserver文件备份到minio

winserver开启 WSMan PS C:\Users\Administrator> Enable-PSRemoting -Force PS C:\Users\Administrator> Set-Item WSMan:\localhost\Client\TrustedHosts -Value "192.168.,17.1.0." -Force PS C:\U…

完整教程:「2025秋招季」AI简历筛选如何破解海选难题?

完整教程:「2025秋招季」AI简历筛选如何破解海选难题?2025-10-17 08:39 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; …

F1分数(F1-score)

* { margin: 0; padding: 0; box-sizing: border-box } body { font-family: "Microsoft YaHei", "Arial", sans-serif; background: linear-gradient(135deg, rgba(102, 126, 234, 1) 0, rgba(11…

教你把未分配的磁盘合并到C盘或者D盘?如何把未分配的硬盘空间分配到另一个磁盘?Windows 11,如何将未分配的磁盘分配给 C 盘?怎么把未分配的磁盘合并到d盘

基本上几步就能学会,先来看看,大概的思路就是:如果多余的盘存在,则需要删除这个磁盘券;扩展需要合并的盘;把需要合并的盘合并进来就完成了。我有几个盘,但其中一个盘我想合并到D盘中,合并到C盘也是一样的道理,…

ComfyUI InstantID 文生图,图生图完整运行指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

项目ai拷打

模块一:高并发点赞 & 幂等性问题:高并发点赞,方案怎么设计?核心答案: 缓存层:使用Redis的SET,Key为article:likes:{文章ID},Value为用户ID。 优点:SADD天然幂等防重;SCARD O(1)复杂度快速计数;SREM快速…

混合(ZR 二十联测 A + MX 炼石 ABC)

100 + 100 + 25 + 20 = 245, Rank 2/6.第一次过 200 是因为放了 2 个 A .jpg混合(ZR 二十联测 A + MX 炼石 ABC) A:ZR 2025 NOIP 二十连测 Day 4 A B:MX 练石 2025 NOIP #11 A C:MX 练石 2025 NOIP #11 B D:MX 练…

Qt项目作品在苹果macos上编译运行效果/视频监控系统/物联网平台等

一、前言说明 在这十几年时间里,用Qt写过几十个项目,一百多个组件,几百个控件,最开始的时候并没有考虑跨平台的问题,后面有用户陆陆续续有其他平台的要求,所以后期写的代码,从一开始设计阶段就会考虑跨平台问题…