Задать стиль DataFrame в Pandas при записи в XLSX файл
Мне необходимо преобразовать данные в нескольких столбцах Pandas DataFrame перед записью их в XLSX файл.
with pd.ExcelWriter('out.xlsx', engine='openpyxl') as writer:
df.style.format('{:.2%}', subset=[13,14,15]) \
.to_excel(writer, sheet_name='Sheet1', header=False, index=False)
Данные записываются, но форматирование (перевод числа в процент) не применяется. Подскажите пожалуйста, в чем моя ошибка?
Ответы (1 шт):
Датафреймы в pandas содержат только бинарные значения, без возможности их форматировать.
Есть разница между тем, что в датафрейме действительно находится, и тем, как это будет изображено для нас, людей.
То, что вы делаете командой
df.style.format('{:.2%}', subset=[13,14,15])
возвращает объект типаStyler
- сам датафреймdf
не изменится.
(Объекты типаStyler
возможно применить только для разных видов изображения того-же самого датафрейма в подходящей среде Питона, или для экспорта в HTML.)Класс
ExcelWriter
умеет форматировать только ячейки, в которых Еxcel принимает столбцы типаdatetime64
.
Значит, ваш подход не будет работать.
Нужно
сначала экспортировать датафрейм в Excel - примерно так, как вы это делаете, но без попытки форматирования:
with pd.ExcelWriter('out.xlsx', engine='openpyxl') as writer: df.to_excel(writer, sheet_name='Sheet1', header=False, index=False)
затем форматировать — или прямо в Excel-е (или его программной среде VBA), или например в Питоне применением того-же самого модуля
openpyxl
(атрибут.number_format
для объектов типаCell
).