Любой способ получить сопоставления кодера метки в Pandon pandas?

Я преобразовываю строки в категориальные значения в моем наборе данных, используя следующий фрагмент кода.

data['weekday'] = pd.Categorical.from_array(data.weekday).labels 

Например, например,

index    weekday
0        Sunday
1        Sunday
2        Wednesday
3        Monday
4        Monday
5        Thursday
6        Tuesday

После кодирования буднего дня мой набор данных выглядит следующим образом:

index    weekday
    0       3
    1       3
    2       6
    3       1
    4       1
    5       4
    6       5

Есть ли способ узнать, что воскресенье было сопоставлено с 3, средой до 6 и так далее?

Ответы

Ответ 1

Лучшим способом сделать это может быть использование кодера ярлыков библиотеки sklearn.

Что-то вроде этого:

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(["paris", "paris", "tokyo", "amsterdam"])
list(le.classes_)
le.transform(["tokyo", "tokyo", "paris"])
list(le.inverse_transform([2, 2, 1]))

Ответ 2

Вы можете создать дополнительный словарь с отображением:

from sklearn import preprocessing
le = preprocessing.LabelEncoder()
le.fit(data['name'])
le_name_mapping = dict(zip(le.classes_, le.transform(le.classes_)))
print(le_name_mapping)
{'Tom': 0, 'Nick': 1, 'Kate': 2}

Ответ 3

Простой и элегантный способ сделать то же самое.

cat_list = ['Sun', 'Sun', 'Wed', 'Mon', 'Mon']
encoded_data, mapping_index = pd.Series(cat_list).factorize()

и вы закончили, проверьте ниже

print(encoded_data)
print(mapping_index)
print(mapping_index.get_loc("Mon"))

Ответ 4

Есть много способов сделать это. Вы можете рассмотреть pd.factorize, sklearn.preprocessing.LabelEncoder и т.д. Однако в этом конкретном случае у вас есть два варианта, которые вам подойдут лучше всего:

По собственному методу вы можете добавить категории:

pd.Categorical( df.weekday, [ 
    'Sunday', 'Monday', 'Tuesday', 
    'Wednesday', 'Thursday', 'Friday', 
    'Saturday']  ).labels

Другой вариант - сопоставить значения напрямую с помощью dict

df.weekday.map({
    'Sunday': 0,
    'Monday': 1,
     # ... and so on. You get the idea ...
})

Ответ 5

Сначала сделайте категоричную серию:

weekdays = pd.Series(['Sun', 'Sun', 'Wed', 'Mon', 'Mon']).astype('category')

Затем проверьте его "категории":

weekdays.cat.categories.get_loc('Sun')

Ответ 6

Если у вас есть численный и категориальный тип данных в кадре данных, вы можете использовать: здесь X - это мой файловый кадр, имеющий категориальные и числовые обе переменные

from sklearn import preprocessing
le = preprocessing.LabelEncoder()

for i in range(0,X.shape[1]):
    if X.dtypes[i]=='object':
        X[X.columns[i]] = le.fit_transform(X[X.columns[i]])

Или вы можете попробовать следующее:

from sklearn.preprocessing import LabelEncoder

le = LabelEncoder()
data = data.apply(le.fit_transform)

Примечание. Этот метод хорош, если вы не заинтересованы в его преобразовании.