Способ работы объекта кодировщика заключается в том, что при fit
он сохраняет некоторые метаданные в атрибутах объекта.Эти атрибуты используются, когда вы хотите преобразовать данные.fit_transform
- это удобный метод для fit
и transform
за один шаг.
Когда вы решите использовать тот же объект для выполнения другого fit_transform
, вы перезаписываете сохраненные метаданные.Это хорошо, если вы не хотите использовать объекты inverse_transform
.
Настройка
df = pd.DataFrame({
'HomeTeam':[1, 3, 27],
'AwayTeam':[9, 8, 100],
'FTR':['dog', 'cat', 'dog'],
'HTR': [*'XYY'],
'Referee': [*'JJB']
})
Ответ на свой вопрос
update
иapply
le = preprocessing.LabelEncoder()
label_encode = ['HomeTeam', 'AwayTeam', 'FTR', 'HTR', 'Referee']
df.update(df[label_encode].apply(le.fit_transform))
df
AwayTeam FTR HTR HomeTeam Referee
0 1 1 0 0 1
1 0 0 1 1 1
2 2 1 1 2 0
Как я это сделаю
Каждый отдельный кодировщик заносится в словарь le
для возможного последующего использования
from collections import defaultdict
le = defaultdict(preprocessing.LabelEncoder)
label_encode = ['HomeTeam', 'AwayTeam', 'FTR', 'HTR', 'Referee']
df = df.assign(**{k: le[k].fit_transform(df[k]) for k in label_encode})
df
AwayTeam FTR HTR HomeTeam Referee
0 1 1 0 0 1
1 0 0 1 1 1
2 2 1 1 2 0
pandas.factorize
Если вы просто хотите коды, вы можете использовать Pandas 'factorize
.Обратите внимание, что это не будет сортировать окончательные значения и помечать их в порядке их появления.
df.update(df[label_encode].apply(lambda x: x.factorize()[0]))
df
AwayTeam FTR HTR HomeTeam Referee
0 0 0 0 0 0
1 1 1 1 1 0
2 2 0 1 2 1
Numpy's unique
Это действительно сортирует окончательные значения и будет выглядеть как LabelEncoder
df.update(df[label_encode].apply(lambda x: np.unique(x, return_inverse=True)[1]))
AwayTeam FTR HTR HomeTeam Referee
0 1 1 0 0 1
1 0 0 1 1 1
2 2 1 1 2 0