Writing pandas DataFrame to Excel with different formats for different columns

后端 未结 2 1030
轮回少年
轮回少年 2021-02-04 18:33

I am trying to write a pandas DataFrame to an .xlsx file where different numerical columns would have different formats. For example, some would show o

相关标签:
2条回答
  • 2021-02-04 19:13

    You can do this with Pandas 0.16 and the XlsxWriter engine by accessing the underlying workbook and worksheet objects:

    import pandas as pd
    
    # Create a Pandas dataframe from some data.
    df = pd.DataFrame(zip(
        [1010, 2020, 3030, 2020, 1515, 3030, 4545],
        [.1, .2, .33, .25, .5, .75, .45],
        [.1, .2, .33, .25, .5, .75, .45],
    ))
    
    # Create a Pandas Excel writer using XlsxWriter as the engine.
    writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter')
    df.to_excel(writer, sheet_name='Sheet1')
    
    # Get the xlsxwriter objects from the dataframe writer object.
    workbook  = writer.book
    worksheet = writer.sheets['Sheet1']
    
    # Add some cell formats.
    format1 = workbook.add_format({'num_format': '#,##0.00'})
    format2 = workbook.add_format({'num_format': '0%'})
    format3 = workbook.add_format({'num_format': 'h:mm:ss AM/PM'})
    
    # Set the column width and format.
    worksheet.set_column('B:B', 18, format1)
    
    # Set the format but not the column width.
    worksheet.set_column('C:C', None, format2)
    
    worksheet.set_column('D:D', 16, format3)
    
    # Close the Pandas Excel writer and output the Excel file.
    writer.save()
    

    Output:

    enter image description here

    See also Working with Python Pandas and XlsxWriter.

    0 讨论(0)
  • 2021-02-04 19:27

    As you rightly point out applying formats to individual cells is extremely inefficient.

    openpyxl 2.4 includes native support for Pandas Dataframes and named styles.

    https://openpyxl.readthedocs.io/en/latest/changes.html#id7

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