Как указать формат данных в Excel с помощью Python

Как указать формат данных в Excel с помощью Python

11 января 2024 г.

В этой статье мы рассмотрим следующее:

  1. Как использовать xlsxwriter для сохранения Excel
  2. Как сохранить несколько фреймов данных на листах с помощью Python
  3. Как использовать Python для стилизации форматирования Excel
  4. Как обеспечить правильное сохранение определенных типов данных, таких как дата-время, целочисленные, строковые и плавающие данные, при использовании Python и xlsxwriter для сохранения фрейма данных в Excel
  5. Описание вопроса:

    Представьте, что у вас есть следующие два фрейма данных, и вы хотите сохранить их в один файл Excel с разными листами и стилизовать форматирование Excel.

    Решение: сохраните Excel с помощью xlsxwriter

    1. Импортируйте пакет xlsxwriter и создайте файл Excel

    Используйте Workbook, чтобы создать новый файл Excel.

    # import package
    import xlsxwriter
    # create excel file
    workbook = xlsxwriter.Workbook("new_excel.xlsx")
    

    2. Создайте два листа

    Используйте add_worksheet, чтобы создать лист, поскольку у нас есть два фрейма данных, которые необходимо сохранить, нам нужно создать два листа.

    worksheet1 = workbook.add_worksheet('df1_sheet')
    worksheet2 = workbook.add_worksheet('df2_sheet')
    

    3. Установите формат заголовка и сохраните заголовок

    Сначала мы устанавливаем формат заголовка и используем .write_row для сохранения нашего заголовка.

    .write_row имеет четыре аргумента: worksheet.write_row(row, col, data, cell_format).

    header_format = workbook.add_format({
     'valign': 'top',
     'fg_color': '#002060',
     'border': 1,
     'font_color': 'white'})
    worksheet1.write_row(0, 0, df1.columns, header_format)
    worksheet2.write_row(0, 0, df2.columns, header_format)
    

    4. Создайте какой-нибудь формат

    format.set_num_format(): этот метод используется для определения числового формата числа в Excel. Он определяет, будет ли число отображаться как целое число, число с плавающей запятой, дата, значение валюты или какой-либо другой пользовательский формат.

    Числовой формат ячейки можно указать с помощью строки формата или индекса одного из встроенных форматов Excel. Для получения дополнительной информации вы можете проверить формат xlsxwriter

    Например: 14 представляет m/dd/yyyy, поэтому format.set_num_format(14) = format.set_num_format('m/dd/yyyy')

    # set datetime format "m/d/yy"
    format_datetime = workbook.add_format({'border': 1})
    format_datetime.set_num_format(14) # based on above table, 14 means "m/d/yy"
    format_datetime.set_font_size(12) # set font size
    
    # set General format
    format_general = workbook.add_format({'border': 1})
    format_general.set_num_format(0) # 0 means general
    format_general.set_font_size(12)
    
    # set integer format "0"
    format_integer = workbook.add_format({'border': 1})
    format_integer.set_num_format(1)
    format_integer.set_font_size(12)
    
    # set float format "0.00"
    format_float = workbook.add_format({'border':1})
    format_float.set_num_format(2)
    format_float.set_font_size(12)
    
    # set integer format with thousands separators "#,##0"
    format_integer_separator = workbook.add_format({'border': 1})
    format_integer_separator.set_num_format(3)
    format_integer_separator.set_font_size(12)
    
    # set percent format "0.00%"
    format_percent = workbook.add_format({'border':1})
    format_percent.set_num_format(10)
    format_percent.set_font_size(12)
    

    5. Сохраните данные в Excel с помощью cell_format

    Нулевая строка индекса уже сохранила наш заголовок, поэтому мы начинаем с одной строки индекса (установите первый аргумент равным 1)

    # .write_column(row, column, data, cell_format)
    
    worksheet1.write_column(1, 0, df1.iloc[:, 0], format_datetime)
    worksheet1.write_column(1, 1, df1.iloc[:, 1], format_integer)
    worksheet1.write_column(1, 2, df1.iloc[:, 2], format_integer_separator)
    worksheet1.write_column(1, 3, df1.iloc[:, 3], format_general)
    worksheet1.write_column(1, 4, df1.iloc[:, 4], format_float)
    worksheet1.write_column(1, 5, df1.iloc[:, 5], format_percent)
    worksheet2.write_column(1, 0, df2.iloc[:, 0], format_datetime)
    worksheet2.write_column(1, 1, df2.iloc[:, 1], format_integer)
    worksheet2.write_column(1, 2, df2.iloc[:, 2], format_integer_separator)
    worksheet2.write_column(1, 3, df2.iloc[:, 3], format_general)
    worksheet2.write_column(1, 4, df2.iloc[:, 4], format_float)
    worksheet2.write_column(1, 5, df2.iloc[:, 5], format_percent)
    

    6. Установить ширину столбца

    Для лучшего отображения данных мы также можем использовать .set_column, чтобы установить ширину столбца.

    worksheet1.set_column('A:A', 15)
    worksheet1.set_column('B:B', 15)
    worksheet1.set_column('C:C', 15)
    worksheet1.set_column('D:D', 15)
    worksheet1.set_column('E:E', 15)
    worksheet1.set_column('F:F', 15)
    worksheet2.set_column('A:A', 15)
    worksheet2.set_column('B:B', 15)
    worksheet2.set_column('C:C', 15)
    worksheet2.set_column('D:D', 15)
    worksheet2.set_column('E:E', 15)
    worksheet2.set_column('F:F', 15)
    

    7. Готово

    workbook.close()
    

    Ниже приведен полный код Python, который использует пакет xlsxwriter для сохранения двух фреймов данных в файл Excel с разными листами и стилизованным форматированием. Код начинается с импорта необходимых пакетов pandas и xlsxwriter. Затем он определяет два кадра данных: df1 и df2. Далее создается новый файл Excel и два листа с использованием функций xlsxwriter.Workbook и add_worksheet соответственно.

    После этого код устанавливает формат заголовка, определяет различные форматы ячеек для разных типов данных и записывает данные в файл Excel с указанными форматами ячеек. Наконец, он устанавливает ширину столбцов, закрывает книгу и, таким образом, завершает процесс сохранения фреймов данных в файл Excel.

    # generate two dataframes 
    import pandas as pd
    
    df1 = pd.DataFrame(
        {'Date': ['2022/12/1', '2022/12/1', '2022/12/1', '2022/12/1'], 'Int': [116382, 227393, 3274984, 438164],
         'Int_with_seperator': [1845132, 298145, 336278, 443816], 'String': ['Tom', 'Grace', 'Luca', 'Tessa'],
         'Float': [98.45, 65.24, 30, 80.88], 'Percent': [0.8878, 0.9523, 0.4545, 0.9921]})
    df2 = pd.DataFrame({'Date': ['2022/11/1', '2022/11/1', '2022/11/1', '2022/11/1'], 'Int': [233211, 24321, 35345, 23223],
                        'Int_with_seperator': [925478, 23484, 123249, 2345675],
                        'String': ['Apple', 'Huawei', 'Xiaomi', 'Oppo'], 'Float': [98.45, 65.24, 30, 80.88],
                        'Percent': [0.4234, 0.9434, 0.6512, 0.6133]})
    print(df1)
    print(df2)
    
    # import package
    import xlsxwriter
    # create excel file
    workbook = xlsxwriter.Workbook("new_excel.xlsx")
    
    # create two sheets
    worksheet1 = workbook.add_worksheet('df1_sheet')
    worksheet2 = workbook.add_worksheet('df2_sheet')
    
    # set header format and save the header
    header_format = workbook.add_format({
     'valign': 'top',
     'fg_color': '#002060',
     'border': 1,
     'font_color': 'white'})
    worksheet1.write_row(0, 0, df1.columns, header_format)
    worksheet2.write_row(0, 0, df2.columns, header_format)
    
    # set datetime format "m/d/yy"
    format_datetime = workbook.add_format({'border': 1})
    format_datetime.set_num_format(14) # based on above table, 14 means "m/d/yy"
    format_datetime.set_font_size(12) # set font size
    
    # set General format
    format_general = workbook.add_format({'border': 1})
    format_general.set_num_format(0) # 0 means general
    format_general.set_font_size(12)
    
    # set integer format "0"
    format_integer = workbook.add_format({'border': 1})
    format_integer.set_num_format(1)
    format_integer.set_font_size(12)
    
    # set float format "0.00"
    format_float = workbook.add_format({'border':1})
    format_float.set_num_format(2)
    format_float.set_font_size(12)
    
    # set integer format with thousands separators "#,##0"
    format_integer_separator = workbook.add_format({'border': 1})
    format_integer_separator.set_num_format(3)
    format_integer_separator.set_font_size(12)
    
    # set percent format "0.00%"
    format_percent = workbook.add_format({'border':1})
    format_percent.set_num_format(10)
    format_percent.set_font_size(12)
    
    worksheet1.write_column(1, 0, df1.iloc[:, 0], format_datetime)
    worksheet1.write_column(1, 1, df1.iloc[:, 1], format_integer)
    worksheet1.write_column(1, 2, df1.iloc[:, 2], format_integer_separator)
    worksheet1.write_column(1, 3, df1.iloc[:, 3], format_general)
    worksheet1.write_column(1, 4, df1.iloc[:, 4], format_float)
    worksheet1.write_column(1, 5, df1.iloc[:, 5], format_percent)
    worksheet2.write_column(1, 0, df2.iloc[:, 0], format_datetime)
    worksheet2.write_column(1, 1, df2.iloc[:, 1], format_integer)
    worksheet2.write_column(1, 2, df2.iloc[:, 2], format_integer_separator)
    worksheet2.write_column(1, 3, df2.iloc[:, 3], format_general)
    worksheet2.write_column(1, 4, df2.iloc[:, 4], format_float)
    worksheet2.write_column(1, 5, df2.iloc[:, 5], format_percent)
    
    worksheet1.set_column('A:A', 15)
    worksheet1.set_column('B:B', 15)
    worksheet1.set_column('C:C', 15)
    worksheet1.set_column('D:D', 15)
    worksheet1.set_column('E:E', 15)
    worksheet1.set_column('F:F', 15)
    worksheet2.set_column('A:A', 15)
    worksheet2.set_column('B:B', 15)
    worksheet2.set_column('C:C', 15)
    worksheet2.set_column('D:D', 15)
    worksheet2.set_column('E:E', 15)
    worksheet2.set_column('F:F', 15)
    
    workbook.close()
    

    Спасибо, что нашли время, чтобы вместе со мной изучить информацию, связанную с данными. Я ценю ваше участие. Если эта информация окажется для вас полезной, я приглашаю вас подписаться на меня или связаться со мной на LinkedIn. Приятного изучения!👋

    :::информация Также опубликовано здесь.

    :::


    Оригинал