pandas.factorize
- pandas.factorize(values, sort=False, na_sentinel=_NoDefault.no_default, use_na_sentinel=_NoDefault.no_default, size_hint=None)[source]
-
Кодирование объекта в виде перечислимого типа или категориальной переменной.
Этот метод полезен для получения числового представления массива, когда важны только уникальные значения. factorize доступен как функция верхнего уровня
pandas.factorize(), а также как методSeries.factorize()иIndex.factorize().- Параметры
-
- values:последовательность
-
Одномерная последовательность. Последовательности, которые не являются объектами pandas, преобразуются в массивы NumPy перед факторизацией.
- sort:bool, по умолчанию False
-
Сортировка uniques и перестановка codes для поддержания взаимосвязи.
- na_sentinel:int или None, по умолчанию -1
-
Значение для обозначения «не найдено». Если None, NaN не будет удалён из уникальных значений values.
Устарело начиная с версии 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 не будет удалён из уникальных значений values.
Добавлена в версии 1.5.0.
- size_hint:int, необязательно
-
Подсказка для алгоритма подсчёта размера хеш-таблицы.
- Возвращаемые значения
-
- codes:ndarray
-
Массив целых чисел, который является индексом в uniques.
uniques.take(codes)будет иметь те же значения, что и values. - uniques:ndarray, Index или Categorical
-
Уникальные действительные значения. Когда values является Categorical, uniques — это Categorical. Когда values — какой-либо другой объект pandas, возвращается Index. В противном случае возвращается одномерный массив NumPy.
Примечание
Даже если в values есть пропущенное значение, uniques не будет содержать записи для него.
См. также
Примечания
Дополнительные примеры см. в руководстве пользователя.
Примеры
Эти примеры демонстрируют функцию
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 возвращается индекс соответствующего типа.
>>> 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.factorize.html