Функция Pandas df.to_excel()

Python 常用函数Pandas: общие функции


to_excel()— это метод DataFrame, используемый для экспорта данных в файл Excel, поддерживающий.xlsxи.xlsформат.

Excel — наиболее часто используемый инструмент анализа данных в корпоративной офисной работе,to_excel()Он позволяет экспортировать pandas DataFrame в хорошо отформатированный файл Excel. Поддерживает несколько листов, форматирование ячеек, вставку формул и другие расширенные возможности, что делает его идеальным для вывода отчётов с данными и результатов анализа.


Базовый синтаксис и параметры

Формат синтаксиса

DataFrame.to_excel(excel_writer, sheet_name='Sheet1', na_rep='',
                   float_format=None, columns=None, header=True,
                   index=True, index_label=None, startrow=0, startcol=0,
                   engine=None, merge_cells=True, inf_rep='inf', ...)

Описание параметра

ПараметрTypeОписаниеЗначение по умолчанию
excel_writerstr, ExcelWriter, объект пути, файлоподобный объектПуть к файлу или объект ExcelWriterОбязательный
sheet_namestrИмя листа'Sheet1'
na_repstrПредставление пропущенных значений''
float_formatstrФормат чисел с плавающей запятойОтсутствует
columnslistСтолбцы для экспортаОтсутствует
headerboolЭкспортировать ли имена столбцовTrue
indexboolЭкспортировать ли индексTrue
index_labelstrИмя столбца индексаОтсутствует
startrowintНачальная строка данных (с отсчётом от 0)0
startcolintНачальный столбец данных (с отсчётом от 0)0
enginestrДвижок записи: 'openpyxl', 'xlsxwriter'Отсутствует

Возвращаемое значение

  • Тип возвращаемого значения:None
  • Напрямую записывает данные в указанный файл Excel, не возвращает значение.

Примеры

С помощью следующих примеров полностью освойтеto_excel()различные варианты использования.

Пример 1: Базовое использование — экспорт в файл Excel

Сначала создайте DataFrame, затем используйтеto_excel()для экспорта в файл Excel.

Пример

import pandas as pd
import openpyxl  # Требуется установить: pip install openpyxl

# Создать пример DataFrame
data = {
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Пекин', 'Шанхай', 'Гуанчжоу', 'Shenzhen'],
    'salary': [8000, 12000, 15000, 7000]
}
df = pd.DataFrame(data)

# Пример 1a: Самый простой экспорт
# excel_writer: путь к файлу (обязательно)
df.to_excel('employees.xlsx', index=False)
print("Экспортировано в employees.xlsx")
print()

# Пример 1b: Экспорт и чтение для проверки
df_check = pd.read_excel('employees.xlsx')
print("Проверка чтения:")
print(df_check)
print()

# Пример 1c: Указание имени листа
df.to_excel('employees_sheet.xlsx', sheet_name='Таблица сотрудников', index=False)
print("Экспортировано в employees_sheet.xlsx (лист: Таблица сотрудников)")

Ожидаемый вывод:

已导出到 employees.xlsx

验证读取:
    name  age       support
Tom   28  Beijing    8000
1  Jerry   35  Shanghai   12000
2   Mike   42  Guangzhou  15000
3   Lucy   26  Shenzhen    7000

已导出到 employees_sheet.xlsx (工作表: 员工表)

Анализ кода:

  • to_excel()Нужно указатьexcel_writerпараметр, т. е. путь к файлу.
  • По умолчанию индекс экспортируется; можно задатьindex=Falseчтобы не экспортировать индекс.
  • sheet_nameпараметр для настройки имени рабочего листа (по умолчанию — Sheet1).

Пример 2: Экспорт нескольких рабочих листов

ИспользованиеExcelWriterвы можете записать несколько DataFrames в разные рабочие листы одного файла Excel.

Пример

import pandas as pd

# Создать несколько DataFrame
df_employees = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, 35, 42, 26],
    'city': ['Пекин', 'Шанхай', 'Гуанчжоу', 'Shenzhen']
})

df_sales = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'sales': [100, 200, 150, 80],
    'revenue': [10000, 20000, 15000, 8000]
})

df_inventory = pd.DataFrame({
    'product': ['A', 'B', 'C', 'D'],
    'stock': [500, 300, 400, 200],
    'status': ['OK', 'Low', 'OK', 'Low']
})

# Пример 2a: использование ExcelWriter для записи нескольких рабочих листов
# mode='w' — это режим по умолчанию, который перезаписывает существующий файл
with pd.ExcelWriter('multi_sheet.xlsx', engine='openpyxl') as writer:
    df_employees.to_excel(writer, sheet_name='Employees', index=False)
    df_sales.to_excel(writer, sheet_name='Sales', index=False)
    df_inventory.to_excel(writer, sheet_name='Inventory', index=False)

print("Экспортировано в multi_sheet.xlsx (содержит 3 листа)")
print()

# Проверка: прочитать все листы
all_sheets = pd.read_excel('multi_sheet.xlsx', sheet_name=None)
print("Все листы:")
for name, df in all_sheets.items():
    print(f"n--- {name} ---")
    print(df)

Ожидаемый вывод:

已导出到 multi_sheet.xlsx (包含3个工作表)

所有工作表:
--- Employees ---
    name  age       city
0   Tom   28    Beijing
1  Jerry   部分    Shanghai
2   Excel  格式    15000  Guangzhou
3   Lucy   26    Shenzhen

--- Sales ---
  product  sales  revenue
0       A    100    10000
起始位置    200    写入    20000
2       C    150    15000
float_format='%.2f'    0    20000
    200    15000      0     8000
1      D      80     位置    0    8000
0     150     12000
3      D     80     12000

--- Inventory ---
  product  库存    状态
0      A    500     正常
1      B    300     低库存
2      位置    400     格式    0    12000
3      位置    200     200

Анализ кода:

  • pd.ExcelWriterявляется контекстным менеджером для записи нескольких рабочих листов.
  • ВwithВнутри блока можно вызывать несколько разto_excel(), каждый раз указывая другое имя рабочего листа.
  • Таким образом, связанные данные можно организовать в одном файле Excel.

Пример 3: Настройка формата и позиции

Он может управлять начальной позицией, форматом и обработкой отсутствующих значений.

Пример

import pandas as pd

# Создать DataFrame, содержащий пропущенные значения и числа с плавающей точкой
df = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy'],
    'age': [28, None, 42, 26],
    'score': [85.567, 92.333, 78.999, 95.0],
    'city': ['Beijing', 'Shanghai', None, 'Shenzhen']
})

# Пример 3a: Настройка представления отсутствующих значений
df.to_excel('output_na.xlsx', index=False, na_rep='N/A')
print("Экспортировано (настраиваемые отсутствующие значения)")

# Пример 3b: Форматирование чисел с плавающей точкой
# float_format использует синтаксис строк форматирования Python
df.to_excel('output_float.xlsx', index=False, float_format='%.2f')
print("Экспортировано (числа с плавающей точкой округлены до 2 знаков после запятой)")

# Пример 3c: Экспорт определённых столбцов
df.to_excel('output_cols.xlsx', index=False, columns=['name', 'score'])
print("Экспортировано (только столбцы name и score)")

# Пример 3d: Указание начальной позиции данных
# startrow и startcol управляют начальной позицией данных в ячейках
with pd.ExcelWriter('output_position.xlsx', engine='openpyxl') as writer:
    # Запись информации заголовка
    writer.sheets['Sheet1'].cell(1, 1).value = 'Таблица оценок сотрудников'
    writer.sheets['Sheet1'].cell(2, 1).value = 'Время статистики: 2024-01-01'

    # Запись данных начиная со строки 4
    df.to_excel(writer, sheet_name='Sheet1', index=False, startrow=3)

print("Экспортировано (указанная начальная позиция)")

# Пример 3e: Не экспортировать индекс и имена столбцов
df.to_excel('output_no_header.xlsx', index=False, header=False)
print("Экспортировано (без индекса и имён столбцов)")

# Просмотр содержимого созданного файла
print(nСодержимое каждого файла:)
for fname in ['output_na.xlsx', 'output_float.xlsx', 'output_cols.xlsx']:
    print(f"n--- {fname} ---")
    df_read = pd.read_excel(fname)
    print(df_read)

Ожидаемый вывод:

已导出(自定义缺失值)
已导出((浮点数保留2位小数)
已导出(只包含 name 和 score 列)
已自由    指定起始位置)
已导出(不包含索引和列名)

各文件内容:
--- output_na.xlsx ---
    name  age  score  city
0   Tom  28 85.567   Beijing
1   Jerry  条件    92.333  Shanghai
2    格式    42  格式    78.999  datetime
3   Lucy    26    格式    95.00    格式化    Shenzhen

--- output_float.xlsx ---
   格式     Excel    位置    startrow    startcol    在指定位置写入    float_format='%.2f' 保留两位小数    na_rep='N/A' 自定义缺失值
2.0
...

Анализ кода:

  • na_repпараметр настраивает строковое представление пропущенных значений.
  • float_formatпараметр использует строки формата Python, такие как'%.2f'чтобы сохранить два знака после запятой.
  • columnsпараметр экспортирует только указанные столбцы.
  • startrowиstartcolможет управлять начальной позицией ячейки данных в Excel.

Пример 4: Форматирование с помощью движка xlsxwriter

Движок xlsxwriter предоставляет более широкие возможности форматирования.

Пример

import pandas as pd

# Нужно установить xlsxwriter: pip install xlsxwriter

# Создать DataFrame
df = pd.DataFrame({
    'name': ['Tom', 'Jerry', 'Mike', 'Lucy', 'John'],
    'age': [28, 35, 42, 26, 31],
    'salary': [8000, 12000, 15000, 7000, 9000],
    'department': ['IT', 'HR', 'Sales', 'IT', 'HR']
})

# Пример 4: Использование xlsxwriter для задания форматирования
# Сначала нужно установить: pip install xlsxwriter
with pd.ExcelWriter('formatted.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='Employees', index=False)

    # Получить объекты рабочей книги и рабочего листа
    workbook = writer.book
    worksheet = writer.sheets['Employees']

    # Определить форматы
    header_format = workbook.add_format({
        'bold': True,        # Полужирный
        'fg_color': '#4472C4',  # Цвет фона (синий)
        'font_color': 'white',  # Цвет шрифта (белый)
        'align': 'center',   # Горизонтальное выравнивание по центру
        'valign': 'vcenter', # Вертикальное выравнивание по центру
        'border': 1          # Граница
    })

    # Установить ширину столбцов
    worksheet.set_column('A:A', 10)  # Ширина столбца A 10
    worksheet.set_column('B:B', 8)
    worksheet.set_column('C:C', 12)
    worksheet.set_column('D:D', 12)

    # Записать форматированный заголовок
    for col_num, column_name in enumerate(df.columns.values):
        worksheet.write(0, col_num, column_name, header_format)

print("Экспортирован форматированный файл Excel: formatted.xlsx")
print("Форматирование включает: полужирный заголовок, синий фон, белый текст, выравнивание по центру, границы, настройки ширины столбцов")

Ожидаемый вывод:

先安装 xlsxwriter 库再运行此示例。
已导出带格式的 Excel 文件: formatted.xlsx

格式包括:制作    表头加粗、蓝色背景、白字、  居中、边框、列宽    导出    使用 openpyxl 引擎  导入    xlsxwriter 引擎支持更丰富的格式设置,如单元格样式、条件格式、图表等

如果需要更高级的 Excel 格式设置,建议:
1. 使用 openpyxl 直接操作
2. 使用 xlsxwriter 获得更好的性能和格式支持

Анализ кода:

  • xlsxwriterДвижок предоставляет более богатые возможности форматирования.
  • Черезworkbook.add_format()создавайте объекты форматирования.
  • Вы можете задать шрифт, цвет фона, границу, выравнивание и т. д.
  • worksheet.set_column()Задайте ширину столбцов.

Примечания

  • Использование.xlsxformat требует установкиopenpyxl:pip install openpyxl。
  • Использованиеxlsxwriterengine требует установки:pip install xlsxwriter。
  • По умолчанию индекс экспортируется; если он не нужен, задайтеindex=False。
  • При экспорте нескольких листов используйтеpd.ExcelWriterконтекстный менеджер.
  • startrowиstartcolОтсчет начинается с 0, т. е. startrow=0 означает первую строку.

Итог

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

В практической работе Excel — наиболее часто используемый формат отчетов,to_excel()Он может удовлетворить большинство потребностей экспорта. Если требуется более сложное форматирование, можно использовать движок xlsxwriter или напрямую использовать библиотеку openpyxl. Рекомендуется, чтобы читатели выбирали подходящий движок и конфигурацию параметров исходя из фактических потребностей.

Python 常用函数Pandas: общие функции

Другие расширения