Python xlsxwriter,格式头

Python xlsxwriter,格式头,python,excel,pandas,format,xlsxwriter,Python,Excel,Pandas,Format,Xlsxwriter,我正在使用xlsxwriter将pandas数据框保存到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='

我正在使用xlsxwriter将pandas数据框保存到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()
请解释,谢谢:

在Excel中,单元格格式替代行格式替代列格式。
pd.core.format.header_样式
转换为格式并应用于标题中的每个单元格。因此,
set\u row()
不能覆盖默认值。将
pd.core.format.header\u style
设置为
None
意味着页眉单元格没有用户定义的格式,因此可以由
set\u row()
覆盖

编辑:在版本
0.18.1
中,必须进行更改

pd.core.format.header_style = None
致:

编辑:从版本0.20开始,再次更改

import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None
谢谢

编辑:从版本0.24开始,现在需要此选项

import pandas.io.formats.excel
pandas.io.formats.excel.ExcelFormatter.header_style = None

谢谢。

在熊猫0.20中,已接受答案的解决方案再次更改

可以在以下位置找到应设置为“无”的格式:

pandas.io.formats.excel.header_style

任何人只要看到这篇文章并使用Pandas 0.20.1,都可以得到更新

看来现在需要的代码是

import pandas.io.formats.excel
pandas.io.formats.excel.header_style = None

显然,
excel
子模块不是自动导入的,因此只需尝试
pandas.io.formats.excel.header\u style=None
即可为pandas 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 with your desired formatting for the header, let's name it: headercellformat

# [4] write to the 0th (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)

熊猫的另一个选择是0.25(也可能是0.24)。这可能不是最好的方法,但对我来说很有效

import pandas.io.formats.excel
pandas.io.formats.excel.ExcelFormatter.header_style = None

如果不想完全设置熊猫的标题样式,也可以将
header=False
传递给
ExcelWriter

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(3, 5), 
                  columns=pd.date_range('2019-01-01', periods=5, freq='M'))

file_path='output.xlsx'
writer = pd.ExcelWriter(file_path, engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', header=False, index=False )
workbook = writer.book
fmt = workbook.add_format({'num_format': 'mm/yyyy', 'bold': True})
worksheet = writer.sheets['Sheet1']
worksheet.set_row(0, None, fmt)
writer.save()

不幸的是,add_格式不再可用

应更新此答案以反映Chris Vecchio的贡献,如下所示:根据docs(),这是推荐的方式。并且,它防止格式化整行(最多XFD列)
import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.rand(3, 5), 
                  columns=pd.date_range('2019-01-01', periods=5, freq='M'))

file_path='output.xlsx'
writer = pd.ExcelWriter(file_path, engine='xlsxwriter')
df.to_excel(writer, sheet_name='Sheet1', header=False, index=False )
workbook = writer.book
fmt = workbook.add_format({'num_format': 'mm/yyyy', 'bold': True})
worksheet = writer.sheets['Sheet1']
worksheet.set_row(0, None, fmt)
writer.save()