Tragen Sie Stile beim Exportieren auf 'xlsx' in Pandas mit XlsxWriter an

Ich benutze die .to_excel-Methode von pandas, um ein DataFrame als Excel-Arbeitsmappe zu schreiben. Das funktioniert auch für Multi-Index DataFrames, da Indexzellen verschmolzen werden. Bei der Verwendung der reinen XlsxWriter kann ich Formate an Zellen anwenden, was auch schön funktioniert.

Allerdings konnte ich bei der Pandas-Methode keinen Weg finden, das Gleiche zu tun. Nur ein Dict mit Spaltennamen und Styles passieren wäre am intuitivsten.

Gibt es eine Möglichkeit, dies zu tun?

4 Solutions collect form web for “Tragen Sie Stile beim Exportieren auf 'xlsx' in Pandas mit XlsxWriter an”

Gibt es eine Möglichkeit, dies zu tun

Zurzeit nicht. Es gibt keinen Formatierungsmechanismus wie der in Pandas für die Formatierung der Excel-Ausgabe (abgesehen von einigen hartcodierten Formaten).

Allerdings, auch wenn es XlsxWriter derzeit nicht unterstützt Formatierung Zellen nach Daten hinzugefügt wird. Es ist auf TODO Liste .

Aktualisieren:

Als Workaround empfehle ich, einen Verweis auf die zugrunde liegende Arbeitsmappe und das Arbeitsblatt zu schreiben und alle Zellen zu überschreiben, die mit den gleichen Daten aus dem Pandas-Dataframe und einem XlsxWriter-Format formatiert werden sollen.

Siehe Arbeiten mit Python Pandas und XlsxWriter .

Wenn du nur den Header pandas.io.formats.excel.header_style willst, kannst du pandas.io.formats.excel.header_style ändern. Natürlich ist das keine allgemeine Lösung, sondern ist ein einfacher Workaround für einen gemeinsamen Use-Case.

 import pandas.core.format header_style_backup = pandas.io.formats.excel.header_style try: pandas.io.formats.excel.header_style = {"font": {"bold": True}, "borders": {"top": "thin", "right": "thin", "bottom": "thin", "left": "thin"}, "pattern": {"pattern": "solid", "fore_colour": 26}, "alignment": {"horizontal": "center", "vertical": "top"}} df.to_excel(writer, sheet_name=sheetname, startrow=table_startrow) finally: pandas.formats.format.header_style = header_style_backup 

Hinweis: Die Position von header_style hat sich in früheren Pandas-Versionen mehrmals geändert. Für ältere Versionen folgendes verwenden:

Version <0.20.0 pandas.formats.format.header_style

Version <0.18.0 pandas.core.format.header_style

Der folgende Ansatz erlaubt mir, die Formatierung von xlsxwriter auf dem Dataframe-Index und Spaltennamen zu verwenden (obwohl ich nicht garantieren kann, dass es die Gültigkeit ist):

 import pandas as pd import xlsxwriter as xl # remove pandas header styles # this avoids the restriction that xlsxwriter cannot # format cells where formatting was already applied pd.core.format.header_style = None # write dataframe to worksheet writer = pd.ExcelWriter(sumfile, engine='xlsxwriter') df.to_excel(writer, sheet_name='test') # create desired xlsxwriter formats workbook = writer.book worksheet = writer.sheets['test'] header = workbook.add_format({'bold': True}) index = workbook.add_format({'align': 'left'}) # apply formats to header and index worksheet.set_row(0, None, header) worksheet.set_column(0,0, None, index) 

Die nächste Version von Pandas (2.0) umfasst die experimentelle Unterstützung für den Export von gestalteten DataFrames direkt nach Excel mit openpyxl: http://pandas-docs.github.io/pandas-docs-travis/style.html#Export-to-Excel

  • So schreiben / aktualisieren Sie Daten in Zellen der vorhandenen XLSX Arbeitsmappe mit xlsxwriter in python
  • Xlsxwriter: gibt es eine Möglichkeit, ein vorhandenes Arbeitsblatt in meiner Arbeitsmappe zu öffnen?
  • Erstellen Sie einen Punkt im Diagramm mit xslwriter
  • Wie kann ich Xlsxwriter-Datei in einem bestimmten Pfad speichern?
  • Ändern der Etikettenausrichtung mit dem XlsxWriter-Modul (Python)
  • Python XlsxWriter grenzt um mehrere Zellen
  • Schreiben Sie an StringIO-Objekt mit Pandas Excelwriter?
  • Python ist die beste Programmiersprache der Welt.