Делаем ваши фреймы данных (намного !!) красивее

Pandas - это наиболее важный инструмент для анализа данных в Python, но не всегда просто сделать данные презентабельными. Для этого многие аналитики по-прежнему обращаются к Excel, чтобы добавить стили данных (например, валюты) или условное форматирование, прежде чем делиться данными с нашей более широкой аудиторией. В этом посте мы рассмотрим, как использовать эти функции, которые являются обычными в Excel, и продемонстрируем, как использовать их с помощью API стилей Pandas!

Зачем нам нужно стилизовать данные?

Наша конечная цель должна заключаться в том, чтобы сделать данные более понятными для наших читателей, сохраняя при этом удобство использования базовых данных, доступных в фреймворке данных. Например, значение 10% может быть проще для понимания, чем значение 0,10, но сохранение доли 0,10 более полезно для дальнейшего анализа.

Что такое API стилей Pandas?

Pandas разработал API стилей в 2019 году, и с тех пор он активно развивается. API возвращает новый объект Styler, в котором есть полезные методы для применения форматирования и стиля к фреймам данных. Конечное оформление достигается с помощью CSS с помощью функций стиля, которые применяются к скалярам, ​​рядам или целым фреймам данных с помощью пар атрибут: значение.

У объекта Styler есть два основных метода:

  1. Styler.applymap - применяет стили поэлементно.
  2. Styler.apply - применяет стили по столбцам / строкам / кадрам данных.

Давайте начнем с загрузки наших данных.

Мы будем использовать тот же набор данных, который доступен в моем руководстве по сводной таблице, и мы будем использовать некоторые из шагов, которые мы там описали. Если вы не знакомы со сводными таблицами в Pandas, мы рекомендуем ознакомиться с моим руководством.

Out:
  Date 	        Region 	Type 	                Units 	Sales
0 2020-07-11 	East 	Children's Clothing 	18 	306
1 2020-09-23 	North 	Children's Clothing 	14 	448
2 2020-04-02 	South 	Women's Clothing 	17 	425
3 2020-02-28 	East 	Children's Clothing 	26 	832
4 2020-03-19 	West 	Women's Clothing 	3 	33

Мы видим, что у нас есть несколько продаж, предоставляющих информацию о регионе, типе, количестве проданных единиц и общей стоимости продаж.

Давайте создадим из этого сводную таблицу, следуя моему предыдущему руководству:

Output:
                            Sales
Region Type                      
East   Children's Clothing  45849
       Men's Clothing       51685
       Women's Clothing     70229
North  Children's Clothing  37306
       Men's Clothing       39975
       Women's Clothing     61419
South  Children's Clothing  18570
       Men's Clothing       18542
       Women's Clothing     22203
West   Children's Clothing  20182
       Men's Clothing       19077
       Women's Clothing     22217

Теперь, когда у нас есть данные, загруженные и сохраненные во фрейме данных под названием pivot, мы можем приступить к стилизации наших данных в Pandas.

Метки типов данных для Pandas

В нашем фрейме данных pivot столбцы Продажи представляют общее количество продаж в долларах. Однако это не сразу понятно читателю, поскольку здесь нет знака доллара, а тысячи значений не разделены запятыми. Давайте посмотрим, как это сделать:

Output:
                            Sales
Region Type                      
East   Children's Clothing  $45,849
       Men's Clothing       $51,685
       Women's Clothing     $70,229
North  Children's Clothing  $37,306
       Men's Clothing       $39,975
       Women's Clothing     $61,419
South  Children's Clothing  $18,570
       Men's Clothing       $18,542
       Women's Clothing     $22,203
West   Children's Clothing  $20,182
       Men's Clothing       $19,077
       Women's Clothing     $22,217

Мы видим, что данные сразу легче понять!

Строковые форматы можно применять по-разному. Некоторые другие примеры включают:

  • Число с плавающей запятой с двумя десятичными знаками: {: .2f}
  • Заполните номера нулями: {: 0 ›2d}
  • Процент с двумя десятичными знаками: {: .2%}

Если бы мы хотели передать форматирование для нескольких столбцов, было бы проще определить словарь, который можно было бы передать в функцию стилизации. Например, мы могли бы написать словарь, как показано ниже:

Что затем может быть передано объекту, как показано ниже:

Добавление условного форматирования

Условное форматирование - отличный инструмент, легко доступный в Excel. Это позволяет нам легко определять ценности на основе их содержания. В Pandas это также легко, но немного скрыто. Мы покажем, насколько легко добиться условного форматирования в Pandas.

Например, если мы хотим выделить любое количество продаж, превышающее 50 000 долларов (скажем, они имели право на получение бонуса после этого момента). Мы можем сделать это с помощью метода applymap. Прежде чем мы начнем, мы определим функцию, которую мы можем передать методу applymap.

Теперь мы можем передать эту функцию в метод applymap:

Это возвращает следующий фрейм данных:

Мы также можем связать стили данных с нашим условным форматированием:

Упрощение чтения связанных методов

Сцепление методов - невероятно полезная функция в Python, но ее не всегда легко читать. Мы можем разделить цепочку на несколько строк, используя символ \, как показано ниже:

Теперь, допустим, мы хотим выделить максимальное и минимальное значения, мы можем добиться этого с помощью другого объекта Styler. Хотя мы могли добиться этого с помощью функций и метода applymap, Pandas, к счастью, имеет встроенные методы для выделения максимальных и минимальных значений. В приведенном ниже примере мы предоставляем именованные цвета, но вы также можете указать шестнадцатеричные значения, чтобы быть более конкретными.

Добавление цветовых шкал к пандам

Иногда нам нужно идентифицировать значения в столбце относительно друг друга. Здесь в игру вступают цветовые гаммы. Мы можем сделать это довольно просто как метод стиля, используя метод background_gradient. Давайте попробуем:

Это возвращает фрейм данных, как показано ниже:

Вы также можете использовать разные cmap. Чтобы узнать больше о cmaps, ознакомьтесь с этим руководством по Matplotlib.

Ограничение столбцов для форматирования

Теперь создадим сводную таблицу с несколькими столбцами значений:

Это создает сводную таблицу, которая выглядит следующим образом:

                                sum 	count
		                Sales 	Sales
Region 	Type 		
East 	Children's Clothing 	45849 	113
        Men's   Clothing 	51685 	122
        Women's Clothing 	70229 	176
North 	Children's Clothing 	37306 	85
        Men's   Clothing 	39975 	89
        Women's Clothing 	61419 	142
South 	Children's Clothing 	18570 	45
        Men's   Clothing 	18542 	39
        Women's Clothing 	22203 	53
West 	Children's Clothing 	20182 	42
        Men's   Clothing 	19077 	41
        Women's Clothing 	22217 	53

Теперь применим метод background_gradient:

Это возвращает следующий фрейм данных:

Если мы хотим ограничить это только одним столбцом, мы можем использовать параметр подмножества, как показано ниже:

Добавление цветовых полос к пандам

Другой иллюстративный способ добавить контекст к размеру значения в столбце - это добавить цветные полосы. Это невероятно простой способ предоставить визуальные эффекты, которые также легко распечатать. Мы можем сделать это с помощью Python, используя приведенный ниже код:

Это возвращает следующий фрейм данных:

Цветные полосы позволяют нам легче увидеть масштаб. Мы также можем использовать параметр align = center, чтобы полосы отображались слева, если значения отрицательные, и справа, если они положительные.

Как повторно использовать стили в пандах

Потратив некоторое время на создание стиля, который вам действительно нравится, возможно, вы захотите использовать его повторно. К счастью, Pandas упрощает эту задачу без необходимости дублировать тщательно созданный код. Вы используете метод .use для объекта Style другой дейтаграммы. Например, если у нас есть два фрейма данных, style1 и style 2, мы можем повторно использовать стиль style1, используя следующее:

Скрытие индекса или столбцов

Поскольку мы говорим о подготовке данных к отображению, давайте поговорим о другом элементе, который Excel упрощает: скрытие столбцов. Мы также можем сделать это в Pandas, используя объекты стилизатора. Если бы мы хотели скрыть индекс, мы могли бы написать:

Date 	    Region Type 	        Units 	        Sales
2020-07-11  East   Children's Clothing 	18.000000 	306
2020-09-23  North  Children's Clothing 	14.000000 	448
2020-04-02  South  Women's Clothing 	17.000000 	425
2020-02-28  East   Children's Clothing 	26.000000 	832
2020-03-19  West   Women's Clothing 	3.000000 	33

Точно так же, если бы мы хотели скрыть столбец, мы могли бы написать:

        Date 	                Region 	Type 	               Sales
0 	2020-07-11 00:00:00 	East 	Children's Clothing    306
1 	2020-09-23 00:00:00 	North 	Children's Clothing    448
2 	2020-04-02 00:00:00 	South 	Women's Clothing       425
3 	2020-02-28 00:00:00 	East 	Children's Clothing    832
4 	2020-03-19 00:00:00 	West 	Women's Clothing       33

Экспорт стилизованных фреймов данных в Excel

Ранее в статье я упоминал, что Style API - это Pandas все еще экспериментальный. В настоящее время мы не можем экспортировать все эти методы, но можем экспортировать background-color и color. Например, если мы хотим экспортировать следующий фрейм данных:

Мы могли бы использовать метод .to_excel для извлечения нашего стилизованного фрейма данных в книгу Excel:

Может быть, просто использовать Excel?

Наконец, могут быть случаи, когда перенос данных в Excel может оказаться более эффективным? В этом случае вы можете просто использовать метод df.to_clipboard (), чтобы скопировать весь фрейм данных в буфер обмена!

В этом нет ничего плохого ...

Спасибо за прочтение!

В этом посте мы узнали, как стилизовать фрейм данных Pandas с помощью API стилей Pandas. Мы узнали, как добавлять стили типов данных, условное форматирование, цветовые шкалы и цветные полосы. Подобно стилям в Excel, Pandas упрощает применение стилей к фреймам данных. Это позволяет нам лучше представлять данные и визуально находить тенденции в данных.

Первоначально опубликовано на https://datagy.io 20 апреля 2020 г.