pandas xlsxwriter,格式标题

时间:2016-04-18 12:40:40

标签: python excel pandas format xlsxwriter

我正在使用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()

尝试设置标题格式的倒数第二行不执行任何操作。

7 个答案:

答案 0 :(得分:27)

我认为您需要先重置默认标题样式,然后才能更改它:

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

答案 1 :(得分:24)

对于遇到此帖并使用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

答案 2 :(得分:6)

Pandas 0.25的另一个选项(可能也是0.24)。可能不是最好的方法,但是它对我有用。

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

答案 3 :(得分:4)

在pandas 0.20中,已接受答案的解决方案再次发生变化。

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

pandas.io.formats.excel.header_style

答案 4 :(得分:1)

对于熊猫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)

答案 5 :(得分:0)

如果您不想完全设置熊猫的标题样式,也可以将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()

答案 6 :(得分:0)

不幸的是 add_format 不再可用