我正在将LabelEncoder应用于pandas DataFrame,df
Feat1 Feat2 Feat3 Feat4 Feat5
A A A A E
B B C C E
C D C C E
D A C D E
我将标签编码器应用于这样的数据框 -
from sklearn import preprocessing
le = preprocessing.LabelEncoder()
intIndexed = df.apply(le.fit_transform)
这是标签的映射方式
A = 0
B = 1
C = 2
D = 3
E = 0
我猜测E
没有给出4
的值,因为它不会出现在Feat 5
以外的任何其他列中。< / p>
我希望E
的值为4
- 但不知道如何在DataFrame中执行此操作。
答案 0 :(得分:13)
您可以fit
标签编码器,然后transform
标签符合规范化编码,如下所示:
In [4]: from sklearn import preprocessing
...: import numpy as np
In [5]: le = preprocessing.LabelEncoder()
In [6]: le.fit(np.unique(df.values))
Out[6]: LabelEncoder()
In [7]: list(le.classes_)
Out[7]: ['A', 'B', 'C', 'D', 'E']
In [8]: df.apply(le.transform)
Out[8]:
Feat1 Feat2 Feat3 Feat4 Feat5
0 0 0 0 0 4
1 1 1 2 2 4
2 2 3 2 2 4
3 3 0 2 3 4
默认情况下,指定标签的一种方法是:
In [9]: labels = ['A', 'B', 'C', 'D', 'E']
In [10]: enc = le.fit(labels)
In [11]: enc.classes_ # sorts the labels in alphabetical order
Out[11]:
array(['A', 'B', 'C', 'D', 'E'],
dtype='<U1')
In [12]: enc.transform('E')
Out[12]: 4
答案 1 :(得分:4)
你可以在单一陈述中适应和转换, 请找到编码单列并分配回数据帧的代码。
df[columnName] = LabelEncoder().fit_transform(df[columnName])