我在数据帧上应用了 LabelEncoder(),它返回以下内容:


order/new_cart 有不同的标签编码数字,比如 70, 64, 71, etc
这是标签不一致,还是我在某处做错了什么?

最佳答案

LabelEncoder 处理一维数组。如果将其应用于多个列,它将在列内保持一致,但在列之间不保持一致。

作为一种解决方法,您可以将数据帧转换为一维数组并在该数组上调用 LabelEncoder。

假设这是数据框:

df
Out[372]:
   0  1  2
0  d  d  a
1  c  a  c
2  c  c  b
3  e  e  d
4  d  d  e
5  d  b  e
6  e  e  b
7  a  e  b
8  b  c  c
9  e  a  b

用 ravel 然后重塑:
pd.DataFrame(LabelEncoder().fit_transform(df.values.ravel()).reshape(df.shape), columns = df.columns)
Out[373]:
   0  1  2
0  3  3  0
1  2  0  2
2  2  2  1
3  4  4  3
4  3  3  4
5  3  1  4
6  4  4  1
7  0  4  1
8  1  2  2
9  4  0  1

编辑:

如果要存储标签,则需要保存 LabelEncoder 对象。
le = LabelEncoder()
df2 = pd.DataFrame(le.fit_transform(df.values.ravel()).reshape(df.shape), columns = df.columns)

现在,le.classes_ 为您提供类(从 0 开始)。
le.classes_
Out[390]: array(['a', 'b', 'c', 'd', 'e'], dtype=object)

如果你想通过标签访问整数,你可以构造一个字典:
dict(zip(le.classes_, np.arange(len(le.classes_))))
Out[388]: {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4}

您可以使用 transform 方法执行相同操作,而无需构建 dict:
le.transform('c')
Out[395]: 2

关于python - sklearn LabelEncoder 中的标签不一致?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38432632/

10-11 06:24