Spec-Zone.ru › pandas 0.23

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

Spec-Zone.ru

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