13

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

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

有什么办法吗?

4

4 回答 4

12

有没有办法这样做

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

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

更新:

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

请参阅使用 Python Pandas 和 XlsxWriter

于 2014-06-05T20:26:55.963 回答
9

如果您只想设置标题样式,则可以修改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 版本中已多次更改。对旧版本使用以下内容:

版本 < 0.20.0pandas.formats.format.header_style

版本 < 0.18.0pandas.core.format.header_style

于 2015-02-22T11:35:33.453 回答
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)

于 2016-02-15T05:01:52.217 回答
1

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

于 2017-04-26T10:53:20.087 回答