如何用Pandas快速将数十万行DataFrame写入Excel?
解决大数据DataFrame快速写入Excel的方案
你遇到的问题是传统Excel写入引擎(如xlsxwriter、openpyxl默认模式)处理超大数据量时的典型性能瓶颈——这类引擎多采用逐行/逐单元格写入的机制,在几十万行数据场景下会产生极大的开销。以下是几个能实现秒级写入的可行方案:
方案1:使用PyExcelerate(性能最优选择)
PyExcelerate是专为高性能Excel写入设计的库,它直接操作Excel底层结构,规避了逐单元格写入的低效问题,几十万行数据写入通常仅需几秒。
操作步骤:
- 安装依赖库:
pip install pyexcelerate
- 转换并写入数据:
from pyexcelerate import Workbook import pandas as pd # 若不需要表头,可去掉[df.columns.tolist()]部分 data = [df.columns.tolist()] + df.values.tolist() wb = Workbook() wb.new_sheet("My Report", data=data) wb.save("filepath/file.xlsx")
如果需要从第8行开始写入(对应原代码的startrow=8),只需在数据前插入7行空列表:
empty_rows = [[] for _ in range(7)] # 无需表头则移除[df.columns.tolist()] data = empty_rows + [df.columns.tolist()] + df.values.tolist() wb.new_sheet("My Report", data=data)
方案2:用openpyxl的写入优化模式
openpyxl支持write_only模式,该模式不会在内存中缓存整个工作表,而是直接向磁盘写入数据,性能比默认模式提升显著。
代码示例:
from openpyxl import Workbook import pandas as pd writer = pd.ExcelWriter('filepath/file.xlsx', engine='openpyxl', mode='w') # 启用write_only模式 writer.book = Workbook(write_only=True) writer.sheets = {} # 按需求从第8行开始写入数据 df.to_excel(writer, sheet_name='My Report', startrow=8, index=False, header=False) writer.close()
方案3:分块写入(适配内存有限场景)
如果机器内存不足,可以将DataFrame拆分为若干小块分批写入,总耗时虽略逊于PyExcelerate,但也能大幅压缩到分钟级甚至秒级,具体取决于分块大小。
代码示例:
import pandas as pd chunk_size = 100000 # 每批次处理10万行 writer = pd.ExcelWriter('filepath/file.xlsx', engine='xlsxwriter') # 先在第8行位置插入空行(xlsxwriter行索引从0开始,第8行对应索引7) worksheet = writer.book.add_worksheet('My Report') worksheet.write_row(7, 0, []) start_row = 8 for _, chunk in enumerate(df.groupby(df.index // chunk_size)): chunk[1].to_excel(writer, sheet_name='My Report', startrow=start_row, index=False, header=False) start_row += len(chunk[1]) writer.close()
额外提示:
- 写入时尽量避免设置复杂格式(如单元格样式、条件格式),这类操作会大幅增加耗时,若需格式可在写入完成后单独处理。
- 如果无需Excel格式功能,优先导出为CSV格式(写入速度可达毫秒级),后续可通过Excel直接打开CSV并另存为xlsx格式。
内容的提问来源于stack exchange,提问作者shashank verma
相关产品推荐
相关产品推荐

