2016-04-18 25 views
13

Sto salvando pandas DataFrame su_excel utilizzando xlsxwriter. Sono riuscito a formattare tutti i miei dati (impostare la larghezza della colonna, la dimensione del carattere ecc.) Tranne per il cambio del carattere dell'intestazione e non riesco a trovare il modo di farlo. Ecco il mio esempio:panda xlsxwriter, intestazione formato

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

penultima riga che cerca di impostare il formato per l'intestazione non fa nulla.

risposta

19

Penso che è necessario prima di reset intestazione di default stile, allora si può cambiare:

pd.core.format.header_style = None 

Tutti insieme:

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

Spiegando da jmcnamara, grazie:

In Excel un formato di cella sostituisce un formato di riga sovrascrive un formato di colonna. Il pd.core.format.header_style viene convertito in un formato e viene applicato a ogni cella nell'intestazione. Pertanto, l'impostazione predefinita non può essere ignorata da set_row(). L'impostazione di pd.core.format.header_style a None significa che le celle di intestazione non hanno un formato definito dall'utente e quindi possono essere sovrascritte da set_row().

EDIT: Nella versione 0.18.1 dovete cambiare

pd.core.format.header_style = None 

a:

pd.formats.format.header_style = None 

grazie krvkir.

+3

Soluzione buona. Solo qualche background per spiegare perché funziona. In Excel, un formato di cella ha la precedenza su un formato di riga che sostituisce un formato di colonna. Il 'pd.core.format.header_style' viene convertito in un formato e viene applicato a ogni cella nell'intestazione. Pertanto, il valore predefinito non può essere sovrascritto da 'set_row()'. Impostare 'pd.core.format.header_style' su' None' significa che le celle dell'intestazione non hanno un formato definito dall'utente e quindi il formato può essere ignorato. – jmcnamara

+4

Sembra che in panda 0.18.1 si spostino 'pd. core.format' al modulo 'pd.formats', quindi ora si dovrebbe scrivere' pd.formats.format.header_style = None'. – krvkir

+0

@krvkir - Grazie, aggiungo il tuo commento per rispondere. – jezrael

4

In panda 0.20 la soluzione della risposta accettata è cambiata di nuovo.

Il formato che dovrebbe essere impostato su Nessuno può essere trovato a:

pandas.io.formats.excel.header_style 
+0

Ottengo AttributeError: l'oggetto 'module' non ha attributo 'excel' per pd.io.formats.excel.header_style = Nessuno. Versione panda 0.20.1. – Devon

+1

Questo errore è stato corretto dalla risposta di @Ironbeard qui sotto. – Devon

19

Un aggiornamento per chi si imbatte in questo post e sta usando Panda 0.20.1.

Sembra che il codice necessario è ora

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

A quanto pare il modulo excel non viene importato automaticamente, in modo semplicemente cercando pandas.io.formats.excel.header_style = None solo alzerà un AttributeError.

Problemi correlati