我正在使用xlsxwriter保存pandas DataFrame to_excel。我已经设法格式化我的所有数据(设置列宽,字体大小等),除了更改标题的字体,我找不到这样做的方法。这是我的例子:
import pandas as pd
data = pd.DataFrame({'test_data': [1,2,3,4,5]})
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='test', index=False)
workbook = writer.book
worksheet = writer.sheets['test']
font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10})
header_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10, 'bold': True})
worksheet.set_column('A:A', None, font_fmt)
worksheet.set_row(0, None, header_fmt)
writer.save()
试图为标题设置格式的倒数第二行什么都不做。
我认为您需要先重置默认标题样式,然后您可以更改它:
pd.core.format.header_style = None
全部一起:
import pandas as pd
data = pd.DataFrame({'test_data': [1,2,3,4,5]})
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
pd.core.format.header_style = None
data.to_excel(writer, sheet_name='test', index=False)
workbook = writer.book
worksheet = writer.sheets['test']
font_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10})
header_fmt = workbook.add_format({'font_name': 'Arial', 'font_size': 10, 'bold': True})
worksheet.set_column('A:A', None, font_fmt)
worksheet.set_row(0, None, header_fmt)
writer.save()
由jmcnamara解释,谢谢:
在Excel中,覆盖行格式的单元格格式会覆盖列格式.pd.core.format.header_style
将转换为格式并应用于标题中的每个单元格。因此,set_row()
无法覆盖默认值。将pd.core.format.header_style
设置为None
意味着标题单元格没有用户定义的格式,因此可以被set_row()
覆盖。
编辑:在版本0.18.1
你必须改变
pd.core.format.header_style = None
至:
pd.formats.format.header_style = None
编辑:从版本0.20再次改变
import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None
谢谢krvkir。
对于发现此帖并使用Pandas 0.20.1的任何人的更新。
现在似乎是必需的代码
import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None
显然excel
子模块不是自动导入的,所以单独尝试pandas.io.formats.excel.header_style = None
就会引发AttributeError
。
在pandas 0.20中,接受的答案的解决方案再次改变。
可以在以下位置找到应设置为“无”的格式:
pandas.io.formats.excel.header_style
对于熊猫0.24:
以下不再适用:
import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None
相反,使用以下伪代码进行自我控制和未来证明:
# [1] write df to excel as usual
writer = pd.ExcelWriter(path_output, engine='xlsxwriter')
df.to_excel(writer, sheet_name, index=False)
# [2] do formats for other rows and columns first
# [3] create a format object for the header: headercellformat
# [4] write to the header row **one cell at a time**, with columnname and format
for columnnum, columnname in enumerate(list(df.columns)):
worksheet.write(0, columnnum, columnname, headercellformat)