Сохранить DataFrame (таблицу данных) в файл Excel с помощью Python — это стандартная задача, которая чаще всего решается с помощью библиотеки Pandas. Pandas имеет встроенные методы для записи DataFrame в различные форматы, включая Excel.
Сохранение DataFrame в Excel с помощью pandas
Для этой операции вам понадобятся:
Библиотека pandas: Для работы с DataFrame. Движок записи Excel: pandas не записывает Excel-файлы напрямую, а использует сторонние библиотеки. Самая распространенная и рекомендуемая — Openpyxl (для. xlsx файлов).
1. Установка необходимых библиотек
Если у вас ещё нет pandas или openpyxl, установите их через pip:
Bash
Pip install pandas openpyxl
2. Основной способ: DataFrame. to_excel()
Метод to_excel() объекта DataFrame позволяет сохранить его в файл Excel.
Python
Import pandas as pd
# 1. Создаем пример DataFrame
Data = {
‘Имя’: [‘Анна’, ‘Борис’, ‘Вера’, ‘Глеб’],
‘Возраст’: [28, 34, 22, 45],
‘Город’: [‘Москва’, ‘СПб’, ‘Казань’, ‘Екатеринбург’],
‘Доход’: [75000, 90000, 60000, 110000]
}
Df = pd. DataFrame(data)
# 2. Указываем имя файла Excel, куда сохранять
Excel_file_name = "мой_датафрейм. xlsx"
# 3. Сохраняем DataFrame в Excel-файл
# index=False предотвращает запись индекса DataFrame как отдельного столбца в Excel
Df. to_excel(excel_file_name, index=False)
Print(f"DataFrame успешно сохранен в файл ‘{excel_file_name}’")
Откройте мой_датафрейм. xlsx, и вы увидите вашу таблицу данных.
3. Более продвинутые опции To_excel()
Метод to_excel() имеет множество полезных аргументов для более тонкой настройки сохранения:
Sheet_name: Имя листа, на который будет сохранён DataFrame. По умолчанию ‘Sheet1’. Index: True (по умолчанию) для записи индекса DataFrame как столбца, False для пропуска. Header: True (по умолчанию) для записи названий столбцов, False для пропуска. Startrow, Startcol: Начальные строка и столбец, с которых начнется запись данных в Excel. Полезно, если вы хотите оставить место для заголовков или другой информации. Freeze_panes: Кортеж (строка, столбец) для создания "закрепленных областей". Например, (1, 0) закрепит первую строку (строка с заголовками). Engine: Используемый движок записи. По умолчанию ‘openpyxl’ для. xlsx и ‘xlwt’ для. xls. Na_rep: Строка, которая будет использоваться для представления пропущенных значений (NaN).
Python
# Создаем DataFrame с пропущенными значениями
Data_nan = {
‘Продукт’: [‘Яблоко’, ‘Банан’, ‘Апельсин’, ‘Виноград’],
‘Цена’: [1.2, None, 0.8, 2.5],
‘Количество’: [100, 150, None, 200]
}
Df_nan = pd. DataFrame(data_nan)
Excel_file_name_advanced = "продвинутый_сохранение. xlsx"
Df_nan. to_excel(
excel_file_name_advanced,
sheet_name="Отчет по продуктам", # Имя листа
index=False, # Не записывать индекс
header=True, # Записать заголовки
startrow=2, # Начать запись с 3-й строки (индекс 2)
startcol=1, # Начать запись со 2-го столбца (индекс 1, столбец B)
na_rep="Н/Д", # Вместо NaN писать "Н/Д"
# freeze_panes=(3, 2) # Зафиксировать области (3-я строка, 2-й столбец)
)
Print(f"DataFrame с продвинутыми опциями успешно сохранен в файл ‘{excel_file_name_advanced}’")
4. Запись нескольких DataFrame на разные листы
Чтобы сохранить несколько DataFrame в один Excel-файл, но на разные листы, вам нужно создать объект ExcelWriter.
Python
Import pandas as pd
# Создаем два разных DataFrame
Df1 = pd. DataFrame({‘A’: [1, 2], ‘B’: [3, 4]})
Df2 = pd. DataFrame({‘X’: [‘foo’, ‘bar’], ‘Y’: [‘baz’, ‘qux’]})
Excel_file_name_multiple = "несколько_листов. xlsx"
With pd. ExcelWriter(excel_file_name_multiple, engine=’openpyxl’) as writer:
df1.to_excel(writer, sheet_name=’Данные_1′, index=False)
df2.to_excel(writer, sheet_name=’Данные_2′, index=False)
Print(f"Два DataFrame успешно сохранены на разные листы в файл ‘{excel_file_name_multiple}’")
5. Добавление данных к существующему файлу/листу (Осторожно!)
Метод to_excel() по умолчанию Перезаписывает существующий файл. Если вы хотите добавить данные на существующий лист или в существующий файл, это сложнее, и pandas не имеет встроенного метода append_to_excel().
Для добавления вам нужно:
Прочитать существующий файл Excel в DataFrame. Изменить или Добавить данные к этому DataFrame. Сохранить (перезаписать) весь DataFrame обратно в файл.
Или, если вы хотите добавить данные в существующий лист Без перезаписи других листов, вам понадобится ExcelWriter и openpyxl для чтения/записи:
Python
Import pandas as pd
From openpyxl import load_workbook
# Создаем файл с начальными данными, если его нет
Initial_file = "добавление_данных. xlsx"
Initial_df = pd. DataFrame({‘ИД’: [1, 2], ‘Статус’: [‘Новый’, ‘В работе’]})
Initial_df. to_excel(initial_file, sheet_name="Основной Отчет", index=False)
Initial_df. to_excel(initial_file, sheet_name="Архив", index=False, startrow=0) # Добавим второй лист
# Новый DataFrame, который нужно добавить
New_data_df = pd. DataFrame({‘ИД’: [3, 4], ‘Статус’: [‘Завершено’, ‘Ожидает’]})
# Загружаем существующую книгу
Book = load_workbook(initial_file)
# Создаем ExcelWriter, указывая существующую книгу
With pd. ExcelWriter(initial_file, engine=’openpyxl’) as writer:
writer. book = book # Привязываем writer к существующей книге
# Если листа нет, он будет создан. Если есть — будет перезаписан.
# Чтобы добавить к существующему листу, нужно сначала прочитать его,
# объединить данные и только потом сохранить
new_data_df. to_excel(writer, sheet_name=’Новые Данные’, index=False)
# Чтобы добавить к существующему листу "Основной Отчет":
# Сначала прочитайте существующие данные с листа
existing_df = pd. read_excel(initial_file, sheet_name=’Основной Отчет’)
# Объедините их с новыми
combined_df = pd. concat([existing_df, new_data_df], ignore_index=True)
# Сохраните объединенный DataFrame обратно на тот же лист, перезаписав его
combined_df. to_excel(writer, sheet_name=’Основной Отчет’, index=False)
writer. close() # Важно для сохранения изменений
Print(f"Данные успешно добавлены в файл ‘{initial_file}’ на новый лист и обновлен ‘Основной Отчет’.")
Этот пример показывает, как можно работать с существующими файлами, но будьте внимательны: прямое добавление строк в конец таблицы без перезаписи всего листа сложнее и обычно требует более низкоуровневой работы с openpyxl напрямую, а не через pandas. to_excel(). В большинстве случаев, если вам нужно только добавить данные, проще читать файл, добавлять строки к DataFrame, а затем перезаписывать весь файл.