Как оформлять таблицы в Jupyter Notebook?
Екатерина СкрипцоваJupyter Notebook – довольно мощный инструмент, который используется для различных вычислений и создания отчетов в интерактивном режиме (не только на языке программирования Python). В свою очередь, форматирование помогает структурировать материал, выделять главные моменты и представлять результаты анализа в наиболее удобной и понятной форме.

pandas.style 🐼
pandas – одна из наиболее популярных библиотек, используемых аналитиками (и не только). В число преимуществ библиотеки pandas входит возможность форматирования таблиц, что мы и рассмотрим в статье.
Мы ознакомимся с наиболее популярными функциями, а именно как:
- Добавлять подписи к таблицам
- Скрывать индекс, если он не хранит в себе важную информацию
- Выделять определенные значения (максимальные/минимальные/пустые)
- Использовать условное форматирование
- Изменять формат значений в ячейках
Итак, приступим!
Для начала импортируем нужную библиотеку:
import pandas as pd
В pandas за "стильные" функции отвечает свойство (property) .style. Вслед за ним применяются различные методы для форматирования и отображения датафреймов.
df.style.formatting_method()
Все далее рассмотренные методы можно использовать одновременно, применяя друг за другом (method chaining):
df.style.first_formatting_method().another_cool_method()
В качестве примера возьмем датасет с объявлениями Airbnb в Лондоне.
Условное форматирование
Перейдем к популярным в Excel методам условного форматирования. Условное форматирование используется для выделения необходимых ячеек или значений, а также дает возможность визуализировать данные с помощью гистограммы или с использованием цветовых шкал. Иными словами, для визуального оформления значений в ячейках.
В pandas можно:
- Выделять максимальное или минимальное значения и пустые ячейки, содержащие null/NaN
- Использовать градиент
- Изменять формат представления значений
- Написать функцию для выделения значений на основе собственных условий
airbnb.head()

Минимальные и максимальные значения
highlight_max – подсвечивает цветом наибольшее значение. Можно применить либо к каждой строке (axis=0/'index'), либо к каждой колонке (axis=1/'columns').
Например, если указать в качестве оси 'columns', то pandas для каждой строки найдет ту колонку, где значение для этой строки наибольшее. В данном случае для каждого наблюдения наибольшее значение встретилось в столбце host_id.
airbnb.head().style.highlight_max(axis='columns')

Наглядный пример: в первой таблице используется 'index', поэтому в каждом столбце подсвечивается ряд, где значение оказалось наибольшим. Во второй – 'columns', где для каждой строки находится столбец с наибольшим значением. Может показаться не очень логичным, но 🤷🏻♀️

Аналогичная функция для подсветки минимальных значений – highlight_min().
Пропущенные значения
Выделять пропущенные значения можно с помощью highlight_null():
airbnb.head(10).style.highlight_null()

Градиент
background_gradient – раскрашивает ячейки в зависимости от их значений. В итоге получается что-то похожее на тепловую карту (heatmap). Например, здесь мы применяем метод только для двух столбцов с ценой и числом отзывов, указав палитру Blues:
(airbnb.head(10) .style .background_gradient(subset=['price','number_of_reviews'], cmap='Blues') )

style.bar
Визуализировать значения можно прямо в таблице с помощью .bar(). Данный метод принимает несколько аргументов:
subset– колонки, для которых нужно построить небольшой барплотcolor– цветalign– выравнивание столбиков (mid – центр ячейки в (max-min)/2; zero – ноль находится в центре ячейки; left – минимальное значение находится в левой части ячейки)
(listings_by_borough.head(10) .style .bar(subset=['num_listings'], color='#67A5EB') )

Форматирование отображения чисел
Иногда может понадобиться определенное число знаков после запятой, значок валюты, удаление ненужных символов и так далее. Для этого существует метод .format().
Продолжая пример с таблицей Airbnb,
- В столбце с
priceоставляем 2 знака после точки и добавляем знак $ - В следующий
formatпередаём словарь с названиями других колонок для изменения:nameк нижнему регистру, избавляемся от пробелов и /вroom_type - Выделяем объявление с самой высокой ценой
# import re
(airbnb.head()
.style
.format('${:.2f}', subset='price')
.format({'name': lambda x:x.lower(),
'room_type': lambda x: re.sub(r'[ /]', '_', x.lower())})
.highlight_max(subset='price')
)

Отображение таблиц
Добавить и отредактировать подпись
В самом Jupyter Notebook'е могут быть представлены сразу несколько таблиц. Чтобы упростить навигацию и сделать всё более понятным, хорошо бы их как-то обозначать. Как? Использовать метод set_caption():
(listings_by_borough.head()
.style
.set_caption('Число объявлений в каждом районе Лондона')
)

Метод set_table_styles позволяет отформатировать выбранный объект. В данном случае нас интересует 'caption' (подпись). В качестве параметра 'props'передаём список, где каждый элемент – кортеж формата (параметр, значение). Например, укажем новый цвет ('color') и размер шрифта ('font-size'):
(listings_by_borough
.style
.set_caption('Число объявлений в каждом районе Лондона')
.set_table_styles([{'selector': 'caption',
'props': [('color', 'blue'), ('font-size', '15px')]
}])
)

Скрыть индекс
Довольно часто в качестве значений индекса используются обычные числа, которые не имеют никакого смысла. В таких случаях его можно спрятать – .hide_index().
(listings_by_borough.head()
.style.set_caption('Число объявлений в каждом районе Лондона')
.hide_index()
)

set_properties
Еще один полезный метод – set_properties, позволяет более гибко настроить другие параметры отображения. Например, выровнять текст по левому краю ('text-align'), сделать фон черным ('background-color'), а текст – оранжевым ('color'):
(listings_by_borough.head()
.style.set_caption('Число объявлений в каждом районе Лондона')
.hide_index()
.set_table_styles([{
'selector': 'caption',
'props': [('color', 'black'),('font-size', '14px')
]}])
.set_properties({'text-align': 'left',
'background-color': 'black',
'color': 'darkorange'})
)

Дополнительные библиотеки
Помимо style в pandas, существуют и другие библиотеки, которые специализируются на форматировании. К примеру:
P.S. если вы используете R, то очень хороший пакет – formattable.
Итог
- Форматирование полезно при составлении каких-либо отчетов.
- В
pandasимеется довольно много методов для изменения внешнего вида таблиц: от условного форматирования до изменения представления ячеек. - Всегда есть альтернатива! Например, sparkline, prettypandas и jupyter-datatables.