Python:在多个工作表上将pandas DataFrame写入Excel的最快方法

时间:2014-09-16 07:52:08

标签: python excel pandas export output

我需要将24个pandas数据框(140列x 400行)导出到 Excel ,每个数据框都放到不同的工作表中。

我正在使用 pandas'内置ExcelWriter。运行24个场景,需要:

写入.xls文件的时间为51秒(使用xlwt

写入.xlsx文件的86秒(使用XlsxWriter

写入.xlsm文件(使用openpyxl

的141秒

仅运行程序21秒(无Excel输出)

写入.xls的问题是电子表格中没有格式化样式,所以如果我在Excel中打开它,选择一个列,然后点击“逗号”按钮格式化数字,它告诉我:'找不到风格的逗号'。我没有把这个问题写到.xlsx,但这甚至更慢。

有关如何加快导出的任何建议? 我不能成为第一个遇到这个问题的人,但经过几个小时的搜索论坛和网站,我还没有找到任何明确的解决方案。

我唯一能想到的是使用 Python 导出到csv文件,然后编写Excel宏将所有CSV合并到一个电子表格中。

.xls文件为10 MB,.xlsx 5.2 MB

谢谢!

2 个答案:

答案 0 :(得分:7)

这是benchmark for different Python to Excel modules

以下是使用发布时最新版本模块的140列x(400 x 24)行的输出:

Versions:
    python      : 2.7.7
    openpyxl    : 2.0.5
    pyexcelerate: 0.6.3
    xlsxwriter  : 0.5.7
    xlwt        : 0.7.5

Dimensions:
    Rows = 9600 (400 x 24)
    Cols = 140

Times:
    pyexcelerate          :  11.85
    xlwt                  :  17.64
    xlsxwriter (optimised):  21.63
    xlsxwriter            :  26.76
    openpyxl   (optimised):  95.18
    openpyxl              : 119.29

与任何基准测试一样,结果将取决于Python /模块版本,CPU,RAM和磁盘I / O以及基准测试本身。因此,请务必根据自己的设置验证这些结果。

此外,由于您特别询问了Pandas,请注意PyExcelerate isn't supported

答案 1 :(得分:1)

对于它的价值,这就是我在xlwt中格式化输出的方式。文档是(或至少是)相当不稳定所以我不得不猜测大部分内容!

import xlwt

style = xlwt.XFStyle()
style.font.name = 'Courier'
style.font.height = 180
style.num_format_str = '#,##0'

# ws0 is a worksheet
ws0.write( row, col, value, style )

此外,我相信在尝试格式化excel(office 2010版本)中生成的电子表格时,我复制了您的错误消息。这很奇怪,但有些下拉工具栏格式选项有效,有些则不适用。但是如果我去"格式化细胞"看起来它们都可以正常工作。通过右键单击。