【问题标题】:Apply styles while exporting to 'xlsx' in pandas with XlsxWriter在使用 XlsxWriter 导出到 pandas 中的“xlsx”时应用样式
【发布时间】:2014-07-26 18:18:18
【问题描述】:

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

但是我找不到使用 pandas 方法的方法。只传递一个带有列名和样式的 dict 是最直观的。

有什么办法吗?

【问题讨论】:

标签: python io pandas xlsx xlsxwriter


【解决方案1】:

有什么办法吗

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

但是,即使是 XlsxWriter 目前也不支持在添加数据后格式化单元格。它位于TODO list

更新:

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

Working with Python Pandas and XlsxWriter

【讨论】:

  • 感谢您的文档!您能否添加一个示例,说明如何在 Pandas 中为 header_style 设置字体颜色或回答 this question
【解决方案2】:

如果你只想设置头部样式,可以修改pandas.io.formats.excel.header_style。当然,这不是通用解决方案,但对于常见用例来说是一种简单的解决方法。

import pandas.core.format
header_style_backup = pandas.io.formats.excel.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 版本中已多次更改。对旧版本使用以下内容:

版本 pandas.formats.format.header_style

版本 pandas.core.format.header_style

【讨论】:

  • 蒂姆,这个答案很有帮助。我试图通过my related question 给你打电话,但不知道该怎么做。
  • 我猜从 Pandas 0.18.1 开始,header_style 已移至 pandas.formats.format.header_style - 您能否相应地更新您的答案?
【解决方案3】:

以下方法允许我在数据帧索引和列名上使用 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)

【讨论】:

  • 在最近的 pandas 版本中,看起来事情发生了一些变化。您现在可以使用“pd.formats.format.header_style = None”来清除默认标题样式。
【解决方案4】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-11
    • 2017-02-16
    • 1970-01-01
    • 2017-07-13
    • 1970-01-01
    • 2018-07-18
    • 2017-02-05
    • 1970-01-01
    相关资源
    最近更新 更多