使用 XlsxWriter 导出到 pandas 中的“xlsx”时应用样式

问题描述 投票:0回答:4

我使用pandas的.to_excel方法将DataFrame编写为Excel工作簿。 即使对于多索引 DataFrame,这也很有效,因为索引单元格会合并。 当使用纯 XlsxWriter 时,我可以将格式应用于单元格,这也很好用。

但是我找不到用 pandas 方法做同样事情的方法。只需传递带有列名称和样式的字典是最直观的。

有什么办法可以做到吗?

python io pandas xlsx xlsxwriter
4个回答
12
投票

有什么办法可以做到吗

目前没有。没有像 Pandas 那样的格式化机制来格式化 Excel 输出(除了一些硬编码格式)。

但是,即使是 XlsxWriter 目前也不支持添加数据后格式化单元格。它在待办事项列表中。

更新:

作为解决方法,我建议获取对基础工作簿和工作表的引用,并覆盖您希望使用 Pandas 数据帧和 XlsxWriter 格式中的相同数据进行格式化的任何单元格。

请参阅使用 Python Pandas 和 XlsxWriter


9
投票

如果您只想设置标题样式,可以修改

pandas.io.formats.excel.ExcelFormatter.header_style
。当然,这不是通用解决方案,而是针对常见用例的简单解决方法。

import pandas.io.formats.excel
header_style_backup = pandas.io.formats.excel.ExcelFormatter.header_style
try:
    pandas.io.formats.excel.header_style = {"font": {"bold": True},
                                       "borders": {"top": "thin", "right": "thin", "bottom": "thin", "left": "thin"},
                                       "pattern": {"pattern": "solid", "fore_colour": 26},
                                       "alignment": {"horizontal": "center", "vertical": "top"}}
    df.to_excel(writer, sheet_name=sheetname, startrow=table_startrow)
finally:
    pandas.formats.format.header_style = header_style_backup

注意: header_style 的位置在之前的 pandas 版本中已多次更改。对于旧版本,请使用以下内容:

版本< 0.24.0

pandas.io.formats.excel.header_style

版本< 0.20.0

pandas.formats.format.header_style

版本< 0.18.0

pandas.core.format.header_style


5
投票

以下方法允许我在数据帧索引和列名称上使用 xlsxwriter 格式(尽管我不能保证它的有效性):

import pandas as pd
import xlsxwriter as xl

# remove pandas header styles
# this avoids the restriction that xlsxwriter cannot
# format cells where formatting was already applied
pd.core.format.header_style = None

# write dataframe to worksheet
writer = pd.ExcelWriter(sumfile, engine='xlsxwriter')
df.to_excel(writer, sheet_name='test')

# create desired xlsxwriter formats
workbook  = writer.book
worksheet = writer.sheets['test']
header = workbook.add_format({'bold': True})
index = workbook.add_format({'align': 'left'})

# apply formats to header and index
worksheet.set_row(0, None, header)
worksheet.set_column(0,0, None, index)


1
投票

Pandas 的下一个版本(2.0)将包括对使用 openpyxl 将样式化 DataFrame 直接导出到 Excel 的实验性支持: http://pandas-docs.github.io/pandas-docs-travis/style.html#Export-to- Excel

© www.soinside.com 2019 - 2024. All rights reserved.