2016-04-18 62 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