pandas.factorize#

pandas.factorize(values, sort=False, use_na_sentinel=True, size_hint=None)[источник]#

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

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

Параметры:
valuesпоследовательность

Одномерная последовательность. Последовательности, не являющиеся объектами pandas, преобразуются в ndarrays перед факторизацией.

sortbool, по умолчанию False

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

use_na_sentinelbool, по умолчанию True

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

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

size_hintint, необязательный

Подсказка для размера хэш-таблицы.

Возвращает:
кодыndarray

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

уникальные значенияndarray, Index или Categorical

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

Примечание

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

Смотрите также

cut

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

unique

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

Примечания

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

Примеры

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

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

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

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

Когда use_na_sentinel=True (по умолчанию), пропущенные значения указываются в коды со значением-сигналом -1 и пропущенные значения не включены в уникальные значения.

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

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

>>> 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])