df = 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', freeze_panes=None, storage_options=None, engine_kwargs=None)
excel_writer
- путь к файлу или существующий pandas.ExcelWriter
.sheet_name='Sheet1'
- имя листа, который будет содержать таблица Excel.na_rep=''
- чем заполнять пропущенные значения (NaN) в данных.float_format=None
- строка формата для чисел с плавающей запятой. Например, float_format='%.2f'
.columns=None
- список столбцов для записи в таблицу Excelheader=True
- записывать или нет имена столбцов. Если задан список строк, то предполагается, что это псевдонимы для имен столбцов в DataFrame
.index=True
- записывать или нет индексные метки строк (индекс).index_label=None
- метка столбца для индексных столбцов, если требуется. Если не указано, а header
и index
имеют значение True
, то используются имена индексов. Если DataFrame
использует MultiIndex
, то нужно передать список меток.startrow=0
- верхняя левая строка ячейки для сохранения в Excel.startcol=0
- верхний левый столбец ячейки для сохранения в Excel.engine=None
- какой движок использовать - openpyxl
или xlsxwriter
. Также можно установить помощью options.io.excel.xlsx.writer
или options.io.excel.xlsm.writer
.merge_cells=True
- записывает MultiIndex
и иерархические строки как объединенные ячейки.inf_rep='inf'
- как представить бесконечность (в Excel нет собственного представления бесконечности).freeze_panes=None
- кортеж из двух целых чисел, представляющих самую нижнюю строку и самый правый столбец для заморозки (при прокрутке). Каждый из этих параметров основан на единице, поэтому (1, 1)
заморозит первую строку и первый столбец (по умолчанию None
).storage_options=None
- engine_kwargs=None
- произвольные аргументы, передаются в движок, записывающий Excel файл.DataFrame.to_excel()
:Метод DataFrame.to_excel()
модуля pandas
записывает объект DataFrame в рабочий лист Excel.
Чтобы записать один объект в файл Excel .xlsx
, необходимо только указать имя целевого файла. Для записи нескольких листов необходимо создать объект pandas.ExcelWriter
с именем целевого файла и указать лист в файле для записи.
Несколько листов можно записать, указав уникальное sheet_name
. После записи всех данных в файл необходимо сохранить изменения. Обратите внимание, что создание объекта pandas.ExcelWriter
с именем файла, которое уже существует, приведет к удалению содержимого существующего файла.
Для совместимости с DataFrame.to_csv()
DataFrame.to_excel()
сериализует списки и преобразует их в строки перед записью. После сохранения книги невозможно записать дальнейшие данные без перезаписи всей книги.
Чтобы записать объект DataFrame
на лист файла Excel, можно использовать метод экземпляра DataFrame.to_excel()
. Аргументы во многом такие же, как и DataFrame.to_csv()
, описанные выше: первый аргумент - это имя файла Excel, а необязательный второй аргумент - имя листа, в который должен быть записан DataFrame
. Например:
df.to_excel("path_to_file.xlsx", sheet_name="Sheet1")
Файлы с расширением .xlsx
будут записаны с использованием модуля xlsxwriter
(если доступно) или openpyxl
.
DataFrame
будет написан таким образом, чтобы имитировать выходные данные REPL. Метка index_label
будет помещена во вторую строку вместо первой. Можно поместить её в первую строку, установив для аргумента merge_cells=False
:
df.to_excel("path_to_file.xlsx", index_label="label", merge_cells=False)
Чтобы записать отдельные DataFrames
на отдельные листы в одном файле Excel, можно передать экземпляр класса pandas.ExcelWriter
.
with pd.ExcelWriter("path_to_file.xlsx") as writer: df1.to_excel(writer, sheet_name="Sheet1") df2.to_excel(writer, sheet_name="Sheet2")
При использовании аргумента engine_kwargs
метод DataFrame.to_excel()
передаст эти аргументы движку. Для этого важно знать, какие функции pandas
использует внутри.
openpyxl
записывает в файлы .xlsx
и .xlsm
. Для создания нового листа использует openpyxl.Workbook()
и openpyxl.load_workbook()
для добавления данных к существующему листу. xlsxwriter
, то он записывает файлы .xlsx
и использует свой класс xlsxwriter.Workbook()
..ods
используется модуль odf
и собственный класс odf.opendocument.OpenDocumentSpreadsheet()
.Библиотека pandas
выбирает средство записи Excel двумя способами:
engine
pandas.options
)Чтобы указать, какой модуль записи необходимо использовать, можно передать ключевой аргумент engine
в DataFrame.to_excel()
и pandas.ExcelWriter
. Встроенные движки:
openpyxl
: требуется версия 2.4 или выше.xlsxwriter
.# Установив `engine` в методе `DataFrame.to_excel()`. df.to_excel("path_to_file.xlsx", sheet_name="Sheet1", engine="xlsxwriter") # Установив `engine` в конструкторе `ExcelWriter()`. writer = pd.ExcelWriter("path_to_file.xlsx", engine="xlsxwriter")
Или через конфигурацию pandas
.
from pandas import options options.io.excel.xlsx.writer = "xlsxwriter" df.to_excel("path_to_file.xlsx", sheet_name="Sheet1")
Библиотека pandas
поддерживает запись файлов Excel в буфероподобные объекты, такие как io.StringIO
или io.BytesIO
, с помощью pandas.ExcelWriter()
.
from io import BytesIO bio = BytesIO() # в конструкторе `ExcelWriter` определяем "движок". writer = pd.ExcelWriter(bio, engine="xlsxwriter") df.to_excel(writer, sheet_name="Sheet1") # Сохраняем книгу writer.save() # читаем, чтобы скопировать книгу в переменную в памяти. bio.seek(0) workbook = bio.read()
Примечание. Установка аргумента
engine
не является обязательным, но рекомендуется. Настройка механизма определяет версию создаваемой книги. Если задатьengine='xlrd'
, то будет создана книга формата Excel 2003 (xls). Использованиеopenpyxl
илиxlsxwriter
создаст книгу в формате Excel 2007xlsx
. Если этот аргумент опущен, то создается книга в формате Excel 2007.
DataFrame
в ExcelВнешний вид листов Excel, созданных с помощью pandas
, можно изменить, используя следующие аргументы в методе DataFrame.to_excel()
.
float_format
: формат строки для чисел с плавающей запятой (по умолчанию отсутствует).freeze_panes
: кортеж из двух целых чисел, представляющих самую нижнюю строку и самый правый столбец для заморозки (при прокрутке). Каждый из этих параметров основан на единице, поэтому (1, 1)
заморозит первую строку и первый столбец (по умолчанию None
).Использование движка xlsxwriter
предоставляет множество опций для управления форматом листа Excel, созданного с помощью метода DataFrame.to_excel()
. Дополнительные ключевые аргументы для модуля xlsxwriter
можно передать через engine_kwargs
.
В документации по модулю можно найти отличные примеры: https://xlsxwriter.readthedocs.io/working_with_pandas.html
OpenDocument
Методы io
для файлов Excel также поддерживают чтение и запись электронных таблиц OpenDocument
с использованием модуля odfpy
. Семантика и функции чтения и записи электронных таблиц OpenDocument
соответствуют тому, что можно сделать для файлов Excel, используя engine='odf'
. В случае использования необходима дополнительная установка зависимости pip install odfpy
.
Функция read_excel()
может читать электронные таблицы OpenDocument
.
# Возвращает DataFrame pandas.read_excel("path_to_file.ods", engine="odf")
Точно так же метод DataFrame.to_excel()
может писать электронные таблицы OpenDocument.
# Записывает `DataFrame` в файл `.ods` DataFrame.to_excel("path_to_file.ods", engine="odf")
DataFrame.to_excel()
Создаем и сохраняем книгу Excel:
>>> import pandas as pd >>> df1 = pd.DataFrame([['a', 'b'], ['c', 'd']], ... index=['row 1', 'row 2'], ... columns=['col 1', 'col 2']) >>> df1.to_excel("output.xlsx")
C указанием имя листа:
>>> df1.to_excel("output.xlsx", sheet_name='Sheet_name_1')
Если необходимо записать более чем один лист книги, необходимо указать объект ExcelWriter
:
>>> df2 = df1.copy() >>> with pd.ExcelWriter('output.xlsx') as writer: ... df1.to_excel(writer, sheet_name='Sheet_name_1') ... df2.to_excel(writer, sheet_name='Sheet_name_2')
Класс ExcelWriter
также можно использовать для добавления к существующему файлу Excel:
>>> with pd.ExcelWriter('output.xlsx', mode='a') as writer: ... df1.to_excel(writer, sheet_name='Sheet_name_3')
Чтобы установить "движок", который будет использоваться для записи файла Excel, можно передать ключевой аргумент engine
(движок по умолчанию выбирается автоматически в зависимости от расширения файла):
>>> df1.to_excel('output1.xlsx', engine='xlsxwriter')