Как оформлять таблицы в Jupyter Notebook?

Как оформлять таблицы в 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,

  1. В столбце с price оставляем 2 знака после точки и добавляем знак $
  2. В следующий format передаём словарь с названиями других колонок для изменения: name к нижнему регистру, избавляемся от пробелов и /в room_type
  3. Выделяем объявление с самой высокой ценой
# 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.


Report Page