我使用pandas的.to_excel方法将DataFrame编写为Excel工作簿。 即使对于多索引 DataFrame,这也很有效,因为索引单元格会合并。 当使用纯 XlsxWriter 时,我可以将格式应用于单元格,这也很好用。
但是我找不到用 pandas 方法做同样事情的方法。只需传递带有列名称和样式的字典是最直观的。
有什么办法可以做到吗?
有什么办法可以做到吗
目前没有。没有像 Pandas 那样的格式化机制来格式化 Excel 输出(除了一些硬编码格式)。
但是,即使是 XlsxWriter 目前也不支持添加数据后格式化单元格。它在待办事项列表中。
更新:
作为解决方法,我建议获取对基础工作簿和工作表的引用,并覆盖您希望使用 Pandas 数据帧和 XlsxWriter 格式中的相同数据进行格式化的任何单元格。
如果您只想设置标题样式,可以修改
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
以下方法允许我在数据帧索引和列名称上使用 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 的下一个版本(2.0)将包括对使用 openpyxl 将样式化 DataFrame 直接导出到 Excel 的实验性支持: http://pandas-docs.github.io/pandas-docs-travis/style.html#Export-to- Excel