尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

Python 将多个DataFrame合并到一个Excel工作表的sheet中有几种方法
📅 发布时间:2026/6/17 20:25:16

 

在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的高级功能

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

 

 

 

相关新闻

  • 2025 涂料供应厂家最新推荐榜:权威品牌测评 + 选购指南,家装工程选品必看
  • 2025 年中走丝线切割源头厂家最新推荐排行榜发布,解读优质厂家技术亮点与选择攻略伺服/高效/自动中走丝线切割厂家推荐
  • 2024浙江省省赛决赛wp

最新新闻

  • UniHacker:跨平台Unity许可证管理技术解决方案
  • 2026年美业培训机构避坑指南:长沙化妆学校、美甲美睫纹绣培训全景对标 - 年度推荐企业名录
  • ViT实战手记:从Patch Embedding到TensorRT部署
  • 2026盘锦大洼区闲置黄金变现全攻略|5家沿街实体店深度对比,高位金价出手怎么选不踩坑 - 行行星
  • 2026年6月核心快讯:杭州帝舵手表保养收费价格与南京法穆兰保养收费明细 - 亨得利官方售后
  • 论文双检时代破局:告别无效改写,百考通AI一站式解决重复率与AIGC超标难题

日新闻

  • 2026年不锈钢卷板厂家推荐排行榜:冷轧热轧/304/201不锈钢卷板,高颜值耐腐蚀源头厂家实力精选 - 企业推荐官【官方】
  • FLUX.1-dev FP8模型实战指南:24GB以下显卡高效部署方案
  • 2026佛山长途搬家价目表:跨省跨市搬家费用完整计算指南 - 从来都是英雄出少年

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号