2016-04-18 61 views
13

我使用xlsxwriter将pandas DataFrame保存为_excel。我已经设法格式化所有数据(设置列宽,字体大小等),除了更改标题的字体,我找不到方法来做到这一点。这里是我的例子:pandas xlsxwriter,格式标题

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() 

尝试设置标头格式的倒数第二行什么也不做。

回答

19

我想你需要先复位默认头样式,然后你可以改变它:

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 

感谢krvkir

+3

很好的解决方法。只是一些背景来解释为什么这个工程。在Excel中,单元格格式覆盖行格式将覆盖列格式。“pd.core.format.header_style”转换为格式并应用于标题中的每个单元格。因此,'set_row()'不能覆盖默认值。将'pd.core.format.header_style'设置为'None'意味着标题单元格没有用户定义的格式,因此格式可以被覆盖。 – jmcnamara

+4

它看起来像在pandas 0.18.1中移动了'pd。 core.format'到'pd.formats'模块,所以现在应该写'pd.formats.format.header_style = None'。 – krvkir

+0

@krvkir - 谢谢,我添加您的评论来回答。 – jezrael

4

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

应设置为无格式,可以发现:

pandas.io.formats.excel.header_style 
+0

我得到AttributeError:'模块'对象没有属性'excel'为pd.io.formats.excel.header_style = None。熊猫版本0.20.1。 – Devon

+1

这个错误已被@Ironbeard的答案纠正。 – Devon

19

的人谁碰到这个帖子来更新并使用熊猫0.20.1。

看来所需的代码现在

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

显然,excel子模块不会自动导入,所以只是想pandas.io.formats.excel.header_style = None单独将引发AttributeError