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, уникальные значения будет не содержать запись для него.
Смотрите также
Примечания
Ссылка руководство пользователя для дополнительных примеров.
Примеры
Эти примеры показывают 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])