Apply styles while exporting to 'xlsx' in pandas with XlsxWriter

前端 未结 4 1103
刺人心
刺人心 2020-12-15 08:49

I use the .to_excel method of pandas to write a DataFrame as an Excel workbook. This works nice even for multi-index DataFrames as index cells become merged. When using the

相关标签:
4条回答
  • 2020-12-15 09:14

    The following approach allows me to use xlsxwriter formatting on the dataframe index and column names (though I can't guarantee it's validity):

    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)

    0 讨论(0)
  • 2020-12-15 09:27

    Is there any way to do so

    Currently no. There isn't a formatting mechanism like that in Pandas for formatting the Excel output (apart from a few hard-coded formats).

    However, even if it was XlsxWriter doesn't currently support formatting cells after data is added. It is on TODO list.

    Update:

    As a workaround I recommend getting a reference to the underlying workbook and worksheet and overwriting any cells that you wish to be formatted with the same data from the Pandas dataframe and a XlsxWriter format.

    See Working with Python Pandas and XlsxWriter.

    0 讨论(0)
  • 2020-12-15 09:29

    If you just want to style the header, you can modify pandas.io.formats.excel.header_style. Of course, this is no general solution, but is an easy workaround for a common 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
    

    Note: The location of header_style has been changing multiple times in prior pandas versions. Use the following for older versions:

    version < 0.20.0 pandas.formats.format.header_style

    version < 0.18.0 pandas.core.format.header_style

    0 讨论(0)
  • 2020-12-15 09:35

    The next version of Pandas (2.0) will include experimental support for exporting styled DataFrames direct to Excel using openpyxl: http://pandas-docs.github.io/pandas-docs-travis/style.html#Export-to-Excel

    0 讨论(0)
提交回复
热议问题