Как указать формат данных в Excel с помощью Python
11 января 2024 г.В этой статье мы рассмотрим следующее:
- Как использовать xlsxwriter для сохранения Excel
- Как сохранить несколько фреймов данных на листах с помощью Python
- Как использовать Python для стилизации форматирования Excel
- Как обеспечить правильное сохранение определенных типов данных, таких как дата-время, целочисленные, строковые и плавающие данные, при использовании Python и xlsxwriter для сохранения фрейма данных в Excel ол>
Описание вопроса:
Представьте, что у вас есть следующие два фрейма данных, и вы хотите сохранить их в один файл 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. Приятного изучения!👋
:::информация Также опубликовано здесь.
:::
Оригинал