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

Автор решения: MarianD
  • Датафреймы в 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).

→ Ссылка