Это введение в категориальный тип данных pandas, включая краткое сравнение.
с R
.


являются типом данных pandas, соответствующим категориальным переменным в
статистика. Категориальная переменная принимает ограниченное и обычно фиксированное значение.
количество возможных значений (
;
в Р). Примеры: пол,
социальный класс, группа крови, принадлежность к стране, время наблюдения или рейтинг через
Шкалы Лайкерта.

Все значения категориальных данных находятся либо в , либо в
или
. Порядок определяется
порядок
, а не лексический порядок значений. Внутренняя структура данных
состоит из
массив и целочисленный массив
которые указывают на реальную ценность

множество.

  • Строковая переменная, состоящая всего из нескольких разных значений. Преобразование такой строки
    переменную в категориальную переменную сэкономит немного памяти, см.
    .

  • Лексический порядок переменной не совпадает с логическим порядком («один», «два», «три»).
    Путем преобразования в категориальный формат и указания порядка категорий, сортировки и
    min/max будет использовать логический порядок вместо лексического, см.
    .

  • Как сигнал другим библиотекам Python о том, что этот столбец следует рассматривать как категориальный
    переменная (например, для использования подходящих статистических методов или типов графиков).

См. также документацию API по категориальным критериям .

.

Создание объекта #

Создание серии #

Категоричный
или столбцы в
можно создать несколькими способами:

Указав
при построении
:

  
 



   0 а 

   1 б 

   2 в 

   3 а 



  

Путем преобразования существующего
или столбец в
тип d:

  
 

 




   0 а а 

   1 б б 

   2 с с 

   3 а а 

  

С помощью специальных функций, например

, который группирует данные в
дискретные бункеры. См. пример по укладке плитки .

в документах.

  
 

 

 



   группа значений 

   0 65 60 - 69 

   1 49 40 - 49 

   2 56 50 - 59 

   3 43 40 - 49 

   4 43 40 - 49 

   5 91 90 - 99 

   6 32 30 - 39 

   7 87 80 - 89 

   8 36 30 - 39 

   9 8 0 - 9 

  

Пройдя

возражать против
или присвоив его
.

  
 
 



 



   0 НЭН 

   1 б 

   2 в 

   3 НаН 




 

 



   А Б 

   0 NaN 

   1 б б 

   2 с с 

   3 а NaN 

  

Категориальные данные имеют конкретный

:

  


   Объект 

   Категория Б 


  

Создание DataFrame #

Как и в предыдущем разделе, где один столбец был преобразован в категориальный, все столбцы в

могут быть пакетно преобразованы в категориальные во время или после построения.

Это можно сделать во время строительства, указав
в
конструктор:

  
 



   Категория А 

   Категория Б 


  

Обратите внимание, что категории, представленные в каждом столбце, различаются; преобразование выполняется столбец за столбцом, поэтому
только метки, присутствующие в данном столбце, являются категориями:

  


   0 а 

   1 б 

   2 в 

   3 а 

   Имя: А, тип d: категория 





   0 б 

   1 в 

   2 в 

   3 д 

   Имя: B, dtype: категория 


  

Аналогично все столбцы в существующем
можно пакетно преобразовать с помощью

:

  
 

 



   Категория А 

   Категория Б 


  

Это преобразование также выполняется столбец за столбцом:

  


   0 а 

   1 б 

   2 в 

   3 а 

   Имя: А, тип d: категория 





   0 б 

   1 с 

   2 в 

   3 д 

   Имя: B, dtype: категория 


  

Контролирующее поведение #

В примерах выше, где мы передали
мы использовали значение по умолчанию
поведение:

  1. Категории выводятся из данных.

  2. Категории неупорядочены.

Чтобы контролировать такое поведение, вместо того, чтобы пасовать
, используйте экземпляр
из
.

  
 

 

 

 



   0 НЭН 

   1 б 

   2 в 

   3 НаН 



  

Аналогично
можно использовать с
чтобы гарантировать, что категории
согласованы между всеми столбцами.

  
 

 

 

 



   0 а 

   1 б 

   2 в 

   3 а 

   Имя: А, тип d: категория 





   0 б 

   1 с 

   2 в 

   3 д 

   Имя: B, dtype: категория 


  

Выполнить табличное преобразование, где все метки целиком
используются как
категории для каждого столбца
параметр может быть определен программно с помощью

.

Если у вас уже есть
и
, вы можете использовать


конструктор для сохранения шага факторизации
в обычном режиме конструктора:

  
 

 
  

Восстановление исходных данных #

Чтобы вернуться к оригиналу
или массив NumPy, используйте

или
:

  
 



   0 а 

   1 б 

   2 в 

   3 а 



 



   0 а 

   1 б 

   2 в 

   3 а 






   0 а 

   1 б 

   2 в 

   3 а 





  

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

В отличие от R
функции, в настоящее время нет возможности назначать/изменять метки в
время создания. Использовать
изменить категории после времени создания.

КатегориальныйDтип #

Тип категориала полностью описывается


  1. : последовательность уникальных значений без пропущенных значений


  2. : логическое значение

Эту информацию можно сохранить в
.

аргумент не является обязательным, что означает, что фактические категории
следует выводить из всего, что присутствует в данных, когда


создано. Предполагается, что категории неупорядочены.
по умолчанию.

  
 

 


 



   CategoricalDtype(categories=None, order=False, категории_dtype=None) 

  

А
можно использовать в любом месте панды
ожидает
. Например

,


, или в
конструктор.

Для удобства можно использовать строку
вместо

когда вы хотите, чтобы поведение по умолчанию
категории неупорядочены и равны установленным значениям, присутствующим в
множество. Другими словами,
эквивалентно

.

Семантика равенства #

Два экземпляра
сравнивать равные
всякий раз, когда они имеют одинаковые категории и порядок. При сравнении двух
неупорядоченные категорики, порядок
не рассматривается.

  
 

   # Равно, поскольку порядок не учитывается, если order=False 

 


   # Неравен, так как второй CategoricalDtype упорядочен 

 

  

Все экземпляры
сравнить равно строке
.

  
 

  

Описание #

Использование

по категориальным данным будет производить аналогичные
выход на
или
типа
.

  
 

 



   кот с 

   считать 3 3 

   уникальный 2 2 

   верх к с 

   частота 2 2 




   счет 3 

   уникальный 2 

   верх в 

   частота 2 

   Имя: кот, тип d: объект 

  

Работа с категориями #

Категориальные данные имеют
и
имущество, в котором перечислены их
возможные значения и имеет ли значение порядок или нет. Эти свойства
выставлено как
и
. Если вы не сделаете это вручную
укажите категории и порядок, они выводятся из переданных аргументов.

  
 






  

Также можно передавать категории в определенном порядке:

  
 






  

Новые категориальные данные: не
автоматически заказан. Вы должны явно
пройти
для обозначения заказанного
.

Результат

не всегда совпадает с
,
потому что
имеет пару гарантий, а именно, что он возвращает категории
в порядке появления и включает только те значения, которые действительно присутствуют.

  
 



   0 б 

   1 а 

   2 б 

   3 в 













  

Переименование категорий #

Переименование категорий осуществляется с помощью

метод:

  
 



   0 а 

   1 б 

   2 в 

   3 а 




 

 



   0 Группа а 

   1 Группа б 

   2 Группа в 

   3 Группа А 




   # Вы также можете передать объект, похожий на dict, для сопоставления переименования 

 



   0 Группа а 

   1 Группа б 

   2 Группа в 

   3 Группа а 



  

В отличие от R
категориальные данные могут иметь категории других типов, кроме строковых.

Категории должны быть уникальными или
поднят:

  

 
 
 

   ValueError: Категориальные категории должны быть уникальными 

  

Категории также не должны быть
или
поднят:

  

 
 
 

   ValueError: Категориальные категории не могут быть нулевыми 

  

Добавление новых категорий #

Добавление категорий можно выполнить с помощью

метод:

  
 






   0 Группа а 

   1 Группа б 

   2 Группа в 

   3 Группа А 



  

Удаление категорий #

Удаление категорий можно выполнить с помощью

метод. Значения, которые удаляются
заменяются на
.:

  
 



   0 Группа а 

   1 Группа б 

   2 Группа в 

   3 Группа а 



  

Удаление неиспользуемых категорий #

Удаление неиспользуемых категорий также можно выполнить:

  
 



   0 а 

   1 б 

   2 а 






   0 а 

   1 б 

   2 а 



  

Настройка категорий #

Если вы хотите удалить и добавить новые категории за один шаг (который имеет некоторые
преимущество в скорости) или просто установите категории в заранее заданный масштаб,
использовать
.

  
 



   0 один 

   1 два 

   2 четыре 

   3 - 




 



   0 один 

   1 два 

   2 четыре 

   3 НаН 



  

Имейте в виду, что
не могу знать, опущена ли какая-то категория
намеренно или потому, что оно написано с ошибкой, или (в Python3) из-за разницы типов (например,
NumPy S1 dtype и строки Python). Это может привести к удивительному поведению!

Сортировка и порядок #

Если категориальные данные упорядочены (
), то порядок категорий имеет
смысл и определенные операции возможны. Если категориальное неупорядочено,
подниму
.

  
 

 

 

 



   0 а 

   3 а 

   1 б 

   2 в 




 

  

Вы можете упорядочить категориальные данные, используя
или отсортировать с помощью
. Это будет
по умолчанию возвращает новый
объект.

  


   0 а 

   3 а 

   1 б 

   2 в 






   0 а 

   3 а 

   1 б 

   2 с 



  

При сортировке будет использоваться порядок, определенный категориями, а не какой-либо лексический порядок, присутствующий в типе данных.
Это справедливо даже для строк и числовых данных:

  
 

 



   0 1 

   1 2 

   2 3 

   3 1 




 



   1 2 

   2 3 

   0 1 

   3 1 




 

  

Изменение порядка #

Изменение порядка категорий возможно через
и

методы. Для
, все
старые категории должны быть включены в новые категории, новые категории не допускаются. Это будет
обязательно сделайте порядок сортировки таким же, как порядок категорий.

  
 

 



   0 1 

   1 2 

   2 3 

   3 1 




 



   1 2 

   2 3 

   0 1 

   3 1 




 

  

Обратите внимание на разницу между назначением новых категорий и изменением порядка категорий: первый
переименовывает категории и, следовательно, отдельные значения в
, но если первый
позиция была отсортирована последней, переименованное значение все равно будет отсортировано последним. Изменение порядка означает, что
способ сортировки значений впоследствии изменится, но не то, что отдельные значения в

изменены.

Если
не заказан,

и

поднимет

. Числовые операции, такие как
,
,
,
и операции на их основе
(например,

, которому нужно будет вычислить среднее между двумя значениями, если длина
массива четный) не работает и поднимает
.

Сортировка по нескольким столбцам #

Столбец с категориальным типом будет участвовать в сортировке по нескольким столбцам так же, как и другие столбцы.
Порядок категориальных определяется
этого столбца.

  
 
 
 
 
 
 
 
 
 



 


   2 е 1 

   3 е 2 

   7 а 1 

   6 а 2 

   0 б 1 

   5 б 1 

   1 б 2 

   4 б 2 

  

Изменение порядка
меняет будущую сортировку.

  
 

 


   7 а 1 

   6 а 2 

   0 б 1 

   5 б 1 

   1 б 2 

   4 б 2 

   2 е 1 

   3 е 2 

  

Сравнения #

Сравнение категориальных данных с другими объектами возможно в трёх случаях:

  • Все сравнения (
    ,
    ,
    ,
    ,
    , и
    ) категориальных данных
    еще одна категориальная серия, когда
    и
    одинаковы.

  • Все сравнения категориальных данных со скаляром.

Все остальные сравнения, особенно сравнения «неравенства» двух категориальных с разными
категории или категориальное выражение с любым объектом, похожим на список, вызовет
.

Любые сравнения категориальных данных с «неравенством» с
,
,
или
категориальные данные с разными категориями или порядком повысят
потому что обычай
Упорядочение категорий можно интерпретировать двояко: с учетом
под заказ и один без.

  
 

 

 



   0 1 

   1 2 

   2 3 






   0 2 

   1 2 

   2 2 






   0 2 

   1 2 

   2 2 



  

Сравнение с категориальным с теми же категориями и порядком или со скалярным произведением:

  
 

   0 Верно 

   1 Ложь 

   2 Ложь 



 

   0 Верно 

   1 Ложь 

   2 Ложь 


  

Сравнение на равенство работает с любым спискомобразным объектом одинаковой длины и скаляров:

  
 

   0 Ложь 

   1 Верно 

   2 Ложь 



 

   0 Верно 

   1 Верно 

   2 Верно 



 

   0 Ложь 

   1 Верно 

   2 Ложь 


  

Это не работает, потому что категории не одинаковы:

  

 
 
 

   Ошибка типа: категориальные значения можно сравнивать только в том случае, если «категории» одинаковы. 

  

Если вы хотите выполнить сравнение «неравенства» категориального ряда с объектом в виде списка
которые не являются категориальными данными, вам необходимо указать явно и преобразовать категориальные данные обратно в
исходные значения:

  
 


 
 
 

   Ошибка типа: невозможно сравнить категориальное значение для op __gt__ с типом  

   Если вы хотите сравнить значения, используйте «np.asarray(cat) other». 


 

  

Когда вы сравниваете две неупорядоченные категориальные категории с одинаковыми категориями, порядок не учитывается:

  
 

 

 

  

Операции #


такие методы, как

будут использовать все категории,
даже если некоторые категории отсутствуют в данных:

с 2

а 1

б 1
 d 0 

Имя: count, dtype: int64



такие методы, как


также показывать «неиспользуемые» категории, когда

.

Один 3 9

Два 3 6

Три 0 0


           
           

           

Groupby также покажет «неиспользуемые» категории, когда
:

а 1,0

б 2,0

c 4,0

d NaN

а с 1,0

d 2,0

б в 3,0

d 4,0

c c NaN

d NaN


   
 

 

 



            а с 1,0 

            d 2,0 

            б в 3,0 

            d 4,0 

           
           


Обработка данных #

Оптимизированные методы доступа к данным Pandas
,

,
, и

,
работать как обычно. Единственная разница — это тип возвращаемого значения (для получения) и
это только значения уже в
можно назначить.


Получение #

Если операция нарезки возвращает либо
или столбец типа

,

dtype сохраняется.

  
 

 

 

 

 

   значения кошек 

   j б 2 

   к б 2 


 

   категория кошек 

   значения int64 



 

   ч а 

   и б 

   дж б 

   Имя: кошки, dtype: категория 



 

   ценности кошек 

   и б 2 

   j б 2 

   к б 2 

  

Примером того, где тип категории не сохраняется, является случай, когда вы берете один единственный
ряд: полученный
имеет dтип
:

  
   # получить всю строку «h» как серию 

 

   кошки а 

   значения 1 

   Имя: h, dтип: объект 

  

Возврат одного элемента из категориальных данных также вернет значение, а не категориальное значение.
длины «1».

  
 


 

   # возвращает строку 


  

Чтобы получить одно значение
типа
, вы передаете список с
одно значение:

  
 

   высота х 

   Имя: кошки, тип d: категория 


  

Средства доступа к строкам и дате и времени #

Аксессуары
и
будет работать, если
являются из
соответствующий тип:

  
 

 



   0 а 

   1 а 

   2 б 

   3 б 






   0 Верно 

   1 Верно 

   2 Ложь 

   3 Ложь 



 

 



   0 01.01.2015 

   1 02.01.2015 

   2 03.01.2015 

   3 04.01.2015 

   4 05.01.2015 






   0 1 

   1 2 

   2 3 

   3 4 

   4 5 


  

Возвращенный
(или
) имеет тот же тип, как если бы вы использовали

/
на
такого типа (а не
тип
!).

Это означает, что возвращаемые значения методов и свойств методов доступа

и возвращаемые значения методов и свойств средств доступа этого

преобразован в один из типов
будет равно:

  
 

 

 


 

           0 Верно 

 1 Верно 

          

2 Верно 3 Верно

Работа выполнена на
а потом новый
построен. Это имеет
некоторые последствия для производительности, если у вас есть

типа string, где много элементов
повторяются (т.е. количество уникальных элементов в
намного меньше, чем
длина

). В этом случае конвертировать оригинал можно быстрее.

к одному из типов

и использовать

или
на том.


Настройка