pandas.factorize
-
pandas.factorize(values, sort=False, order=None, na_sentinel=-1, size_hint=None)[source] -
Кодирование объекта как перечислимого типа или категориальной переменной.
Этот метод полезен для получения числового представления массива, когда важно только идентифицировать различные значения.
factorizeдоступен как функция верхнего уровняpandas.factorize(), а также как методSeries.factorize()иIndex.factorize().Параметры: values : последовательность
Последовательность 1-й размерности. Последовательности, которые не являются объектами pandas, преобразуются в массивы ndarray перед факторизацией.
sort : bool, по умолчанию False
Сортировать
uniquesи перетасоватьlabelsдля поддержания взаимосвязи.order
Устарело начиная с версии 0.23.0: Этот параметр не имеет эффекта и устарел.
na_sentinel : int, по умолчанию -1
Значение для обозначения «не найдено».
size_hint : int, необязательно
Подсказка для модуля размера хеш-таблицы.
Возвращает: labels : ndarray
Массив целых чисел ndarray, который является индексатором в
uniques.uniques.take(labels)будет иметь те же значения, что иvalues.uniques : ndarray, Index или Categorical
Уникальные допустимые значения. Когда
valuesявляется Categorical,uniquesявляется Categorical. Когдаvaluesявляется другим объектом pandas, возвращаетсяIndex. В противном случае возвращается одномерный массив ndarray.Примечание
Даже если в
valuesесть пропущенное значение,uniquesне будет содержать запись для него.См. также
-
pandas.cut - Дискретизация массива непрерывных значений.
-
pandas.unique - Поиск уникальных значений в массиве.
Примеры
Эти примеры демонстрируют факторизацию как функцию верхнего уровня, как
pd.factorize(values). Результаты идентичны для методов, таких какSeries.factorize().>>> labels, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b']) >>> labels array([0, 0, 1, 2, 0]) >>> uniques array(['b', 'a', 'c'], dtype=object)
С
sort=True,uniquesбудет отсортирован, аlabelsбудет перемешан, чтобы сохранить взаимосвязь.>>> labels, uniques = pd.factorize(['b', 'b', 'a', 'c', 'b'], sort=True) >>> labels array([1, 1, 0, 2, 1]) >>> uniques array(['a', 'b', 'c'], dtype=object)
Пропущенные значения указываются в
labelsсna_sentinel(по умолчанию-1). Обратите внимание, что пропущенные значения никогда не включаются вuniques.>>> labels, uniques = pd.factorize(['b', None, 'a', 'c', 'b']) >>> labels array([ 0, -1, 1, 2, 0]) >>> uniques array(['b', 'a', 'c'], dtype=object)
До сих пор мы факторизовали только списки (которые внутренне преобразуются в массивы NumPy). При факторизации объектов pandas тип
uniquesбудет отличаться. Для Categorical возвращаетсяCategorical.>>> cat = pd.Categorical(['a', 'a', 'c'], categories=['a', 'b', 'c']) >>> labels, uniques = pd.factorize(cat) >>> labels 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']) >>> labels, uniques = pd.factorize(cat) >>> labels array([0, 0, 1]) >>> uniques Index(['a', 'c'], dtype='object')
-
© 2008–2012, 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/0.23.4/generated/pandas.factorize.html