Как маркировать категориальные переменные в Пандах по порядку? - PullRequest
0 голосов
/ 10 января 2019

У меня есть кадр данных pandas со следующими категориальными переменными в виде столбцов слева и их конкретными реализациями справа,

enter image description here

(извинения за низкое разрешение).

Для статистической регрессии я хочу обозначить все эти категориальные переменные, поэтому, например, в LotShape, Reg становится 0, IR1 становится 1, IR2 2 и IR3 3. Я обнаружил, что Scikit-Learn LabelEncoder может выполнять работу , но есть проблема. Некоторые из этих категориальных переменных неявно являются порядковыми, и 0, 1, ... должны быть назначены на правильные метки, а LotShape там только в порядке.

Итак, мой вопрос: как бы я эффективно, в некотором порядке, который я укажу, обозначил бы большое количество категориальных переменных?

Ответы [ 2 ]

0 голосов
/ 10 января 2019

Для этого можно использовать базовую функцию Python list.index().

Взяв примеры списков из ответа Coolio2654:

x= ['GA','TA','SA','TA','GA','TA','SA']
orderlist = ['GA','TA','SA']

Использование функции map:

list(map(lambda a: orderlist.index(a), x))

Или понимание списка:

[orderlist.index(a) for a in x]

Выходные данные для каждого из вышеперечисленных:

[0, 1, 2, 1, 0, 1, 2]

Выше можно поместить функцию, которая может быть вызвана для каждого категориального столбца.

0 голосов
/ 10 января 2019

Может быть, это может помочь.

x= ['GA','TA','SA','TA','GA','TA','SA']

import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing.label import _encode
from sklearn.utils import column_or_1d
x = column_or_1d(x, warn=True)
classes_,encoded_values = _encode(x,uniques=np.array(['GA','TA','SA']),encode=True)
encoded_values, classes_

#(array([0, 1, 2, 1, 0, 1, 2]), ['GA', 'TA', 'SA'])

#comparing with labelencoder, which will sort the labels before encoding
le = LabelEncoder()

le.fit_transform(x),le.classes_

#
(array([0, 2, 1, 2, 0, 2, 1], dtype=int64),
 array(['GA', 'SA', 'TA'], dtype='<U2'))
...