Spec-Zone.ru › pandas 1

pandas.Series.factorize

Series.factorize(sort=False, na_sentinel=_NoDefault.no_default, use_na_sentinel=_NoDefault.no_default)[source]

Кодирование объекта как перечислимого типа или категориальной переменной.

Этот метод полезен для получения числового представления массива, когда важно только идентифицировать уникальные значения. factorize доступен как функция верхнего уровня pandas.factorize(), а также как метод Series.factorize() и Index.factorize().

Параметры
sort:bool, по умолчанию False

Сортировка uniques и перестановка codes для сохранения связи.

na_sentinel:int или None, по умолчанию -1

Значение для обозначения «не найдено». Если None, NaN из значений не будет удален из уникальных значений.

Устарело начиная с версии 1.5.0: Аргумент na_sentinel устарел и будет удален в будущих версиях pandas. Укажите use_na_sentinel как True или False.

Изменено в версии 1.1.2.

use_na_sentinel:bool, по умолчанию True

Если True, значение sentinela -1 будет использоваться для значений NaN. Если False, значения NaN будут закодированы как неотрицательные целые числа, и NaN не будет удален из уникальных значений.

Добавлена в версии 1.5.0.

Возвращает
codes:ndarray

Массив целых чисел, являющийся индексатором в uniques. uniques.take(codes) будет содержать те же значения, что и values.

uniques:ndarray, Index или Categorical

Уникальные допустимые значения. Когда values является Categorical, uniques является Categorical. Когда values является другим объектом pandas, возвращается Index. В противном случае возвращается одномерный массив ndarray.

Примечание

Даже если в values есть пропущенное значение, uniques его не будет содержать.

См. также

cut

Дискретизация массива с непрерывными значениями.

unique

Найти уникальные значения в массиве.

Примечания

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

Примеры

Эти примеры демонстрируют метод factorize как функцию верхнего уровня, аналогично pd.factorize(values). Результаты идентичны для методов, таких как Series.factorize().

>>> codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'])
>>> codes
array([0, 0, 1, 2, 0]...)
>>> uniques
array(['b', 'a', 'c'], dtype=object)

При использовании sort=True, uniques будет отсортирован, а codes будет переставлен так, чтобы связь сохранилась.

>>> codes, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'], sort=True)
>>> codes
array([1, 1, 0, 2, 1]...)
>>> uniques
array(['a', 'b', 'c'], dtype=object)

При использовании use_na_sentinel=True (по умолчанию) пропущенные значения обозначаются в codes значением sentinela -1, а пропущенные значения не включены в uniques.

>>> codes, uniques = pd.factorize(['b', None, 'a', 'c', 'b'])
>>> codes
array([ 0, -1,  1,  2,  0]...)
>>> uniques
array(['b', 'a', 'c'], dtype=object)

До сих пор мы факторизировали только списки (которые в итоге преобразуются в массивы NumPy). При факторизации объектов pandas тип uniques будет другим. Для Categoricals возвращается Categorical.

>>> cat = pd.Categorical(['a', 'a', 'c'], categories=['a', 'b', 'c'])
>>> codes, uniques = pd.factorize(cat)
>>> codes
array([0, 0, 1]...)
>>> uniques
['a', 'c']
Categories (3, object): ['a', 'b', 'c']

Обратите внимание, что 'b' находится в uniques.categories, несмотря на то, что его нет в cat.values.

Для всех остальных объектов pandas возвращается Index соответствующего типа.

>>> cat = pd.Series(['a', 'a', 'c'])
>>> codes, uniques = pd.factorize(cat)
>>> codes
array([0, 0, 1]...)
>>> uniques
Index(['a', 'c'], dtype='object')

Если NaN присутствует в значениях, и мы хотим включить NaN в уникальные значения, это можно сделать, задав use_na_sentinel=False.

>>> values = np.array([1, 2, 1, np.nan])
>>> codes, uniques = pd.factorize(values)  # default: use_na_sentinel=True
>>> codes
array([ 0,  1,  0, -1])
>>> uniques
array([1., 2.])
>>> codes, uniques = pd.factorize(values, use_na_sentinel=False)
>>> codes
array([0, 1, 0, 2])
>>> uniques
array([ 1.,  2., nan])

© 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/1.5.0/reference/api/pandas.Series.factorize.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API