Задать стиль 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).