2025, Oct 02 19:18

Pandas Styler и Excel: почему пропадают полосы и как правильно экспортировать

Почему полосы из Pandas Styler.bar() пропадают после to_excel(); что поддерживает Excel и как добавить полосы условным форматированием или экспортировать в HTML.

Когда Pandas Styler рисует наглядные полосы поверх числовых столбцов в Jupyter‑ноутбуке, хочется увидеть то же самое в экспортированном файле Excel. Но стоит открыть таблицу — и полосы исчезают. В этом материале разбираемся, почему так происходит, что действительно поддерживается и как надежно делиться оформленным результатом.

Ноутбук vs Excel: одни и те же данные, разные механизмы рендеринга

Styler в Jupyter использует HTML и CSS для визуализации DataFrame. Excel, напротив, не понимает эти CSS‑стили. Поэтому часть визуальных приемов, которые отлично выглядят в ноутбуке, не переживает экспорт в .xlsx.

Воспроизводимый пример с проблемой

Ниже фрагмент кода читает CSV, применяет Styler.bar() к столбцу close и затем записывает в Excel‑файл. В ноутбуке полосы видны. В Excel — нет.

import pandas as pd
quotes = pd.read_csv('./sp500.csv')
view = quotes.style
view.bar(subset=['close'], color='#6399ae',
         vmin=0, vmax=quotes['close'].max())
view.to_excel('./sp500.csv', index=False)

Почему полосы исчезают в Excel

Excel не поддерживает стили на основе CSS, которые использует Styler. В to_excel() можно выгрузить лишь ограниченную часть возможностей Styler, и Styler.bar() в нее не входит. Официальная документация подтверждает, что при экспорте в Excel поддерживается только выбранный набор функций. См. раздел Export to Excel в документации по визуализации таблиц Pandas: https://pandas.pydata.org/pandas-docs/stable/user_guide/style.html#Export-to-Excel.

Если вам нужны полосы внутри ячеек именно в Excel, используйте родное условное форматирование (data bars), а не CSS‑полосы, которые генерирует Styler.

Что делать вместо этого

Если задача — передать результат по принципу «запустить и посмотреть» с сохранением оформления, самый прямой путь — экспорт в HTML. В HTML CSS‑полосы будут отображаться ровно так, как в ноутбуке. Получившийся файл откроется в любом современном браузере. Оттуда можно выделить таблицу и вставить её в Microsoft Word через Специальную вставку, выбрав формат HTML. Возможно, есть способы вставить и в Excel, но надежный путь, описанный здесь, — в Word.

import pandas as pd
quotes = pd.read_csv('./sp500.csv')
view = quotes.style
view.bar(subset=['close'], color='#6399ae',
         vmin=0, vmax=quotes['close'].max())
html_out = view.to_html()
with open('sp500.html', 'w', encoding='utf-8') as fh:
    fh.write(html_out)

Так вы сохраните точное оформление, которое создает Styler, — для удобного обмена, просмотра и, при необходимости, копирования‑вставки в другие инструменты, поддерживающие HTML‑форматирование.

Почему это важно для отчетных процессов

Представление данных зависит от движка рендеринга целевой среды. Визуальные приемы, ориентированные на ноутбук, не переносятся в Excel автоматически. Понимание этого заранее помогает избежать тупиков и выбрать правильный канал вывода для аудитории: родные возможности Excel для электронных таблиц или HTML — для веб‑подобного, пиксельно точного отображения.

Выводы

Styler.bar() — это визуализация на CSS и она не переживает экспорт в Excel через to_excel(). Для настоящих полос внутри ячеек Excel используйте «полосы данных» из условного форматирования. Для быстрого обмена, где важно сохранить оформление Pandas, экспортируйте HTML с to_html() и распространяйте HTML‑файл. Подстраивайте формат вывода под конечный носитель — так вы сэкономите время, избежите сюрпризов и дадите ровно то, чего ждут ваши проверяющие.

Статья основана на вопросе на StackOverflow от ludovico и ответе Ashish Chandpa.