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