pandas xlsxwriter, en-tête de format

je sauvegarde pandas DataFrame to_excel en utilisant xlsxwriter. J'ai réussi à formater toutes mes données (définir la largeur de la colonne, la taille de la police, etc.) sauf pour changer la police de l'en-tête et je ne trouve pas le moyen de le faire. Voici mon exemple:

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

L'avant-dernière ligne, qui tente de définir le format de l'en-tête ne fait rien.

19
demandé sur jezrael 2016-04-18 15:40:40

3 réponses

je pense que vous devez d'abord réinitialiser par défaut de l'en-tête de style, alors vous pouvez le modifier:

pd.core.format.header_style = None

Tous ensemble:

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

explication par jmcnamara, je vous remercie:

Dans Excel un format de cellule remplace un format de ligne remplace un format de colonne.pd.core.format.header_style est converti en format et est appliqué à chaque cellule de l'en-tête. Par conséquent, la valeur par défaut ne peut pas être dépassée par set_row(). Réglage pd.core.format.header_styleNone signifie que les cellules d'en-tête n'ont pas un format défini par l'utilisateur et donc il peut être remplacé par set_row().

EDIT: Dans la version 0.18.1 vous devez modifier

pd.core.format.header_style = None

à:

pd.formats.format.header_style = None

merci krvkir.

25
répondu jezrael 2017-05-23 11:54:41

une mise à jour pour quiconque tombe sur ce post et utilise Pandas 0.20.1.

Il semble que le code est maintenant

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

Apparemment excel sous-module n'est pas importé automatiquement, il suffit d'essayer pandas.io.formats.excel.header_style = None seul va soulever un AttributeError.

24
répondu Ironbeard 2017-05-31 15:53:27

dans pandas 0.20 la solution de la réponse acceptée a changé à nouveau.

Le format qui doit être défini sur Aucun peut être trouvé à:

pandas.io.formats.excel.header_style
4
répondu Alec Hanefeld 2017-05-12 14:52:14