当前位置: 首页 > news >正文

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

 

在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.rkmt.cn/news/22674.html

相关文章:

  • 2025 涂料供应厂家最新推荐榜:权威品牌测评 + 选购指南,家装工程选品必看
  • 2025 年中走丝线切割源头厂家最新推荐排行榜发布,解读优质厂家技术亮点与选择攻略伺服/高效/自动中走丝线切割厂家推荐
  • 2024浙江省省赛决赛wp
  • 2025年苏州保洁服务公司最新权威推荐榜:专业家政与深度清洁口碑优选,覆盖日常保洁、开荒保洁、深度清洁及企业保洁服务
  • 2025 年快速退火炉优质厂家最新推荐榜单:真空 / 半导体 / 晶圆 / 高温 / 桌面 / 半自动 / 全自动 / 芯片 / 硅片 / RTP 设备企业权威评选
  • Luogu P10027 梦境世界 题解 [ 蓝 ] [ 多维 DP ]
  • winserver文件备份到minio
  • 教你把未分配的磁盘合并到C盘或者D盘?如何把未分配的硬盘空间分配到另一个磁盘?Windows 11,如何将未分配的磁盘分配给 C 盘?怎么把未分配的磁盘合并到d盘
  • 实用指南:VMware挂载Kail Linux
  • OpenCV基础操作与图像处理 - 指南
  • 2025年行业内游乐设施/过山车游乐设施权威榜单厂家-河北天鸿游乐设备
  • 机器学习技术助力美国西海岸地震预警系统升级
  • 2025年市场课桌椅/钢塑课桌椅最新TOP排名厂家-江西华聚智能家具集团有限公司
  • AT 随机做题 I
  • 画图3D真好用 - Gon
  • 高校与某中心共建机器人技术教育项目
  • WordPress维护模式完整指南:手动实现与插件方案
  • 原型链污染学习
  • 重新认识 Golang 中的 json 编解码
  • 关于价值原语与AI元人文构想的对话全记录——DeepSeek研究
  • Pytorch66页实验题
  • uni-app x开发商城系统,商品列表
  • PySimpleGUI 中有没有类似VB的timer组件
  • 向量空间与子空间
  • 西工大开源 Easy Turn:全双工轮次转换检测模型;百度 MuseSteamer 引入开放世界生成能力丨日报
  • 2025.10.16总结
  • containerd二进制安装
  • 维修笔记 | 一例滤波电容老化引发开关电源异常现象
  • (一)GPU与CUDA概述
  • 微软已停止对 Windows 10 系统的支持