Python sklearn LabelEncoder中的标签不一致?
我在数据帧上应用了一个Python sklearn LabelEncoder中的标签不一致?,python,pandas,scikit-learn,Python,Pandas,Scikit Learn,我在数据帧上应用了一个LabelEncoder(),它返回以下内容: encoder = LabelEncoder() all_values = String_df.values.ravel() #convert the dataframe to one long array encoder.fit(all_values) labeled_df = String_df.apply(encoder.transform) order/new\u carts具有不同的标签编码编号,如70、64、7
LabelEncoder()
,它返回以下内容:
encoder = LabelEncoder()
all_values = String_df.values.ravel() #convert the dataframe to one long array
encoder.fit(all_values)
labeled_df = String_df.apply(encoder.transform)
order/new\u cart
s具有不同的标签编码编号,如70、64、71等
这是不一致的标签,还是我在某个地方做错了什么?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\uu
为您提供类(从0开始)
如果要按标签访问整数,可以构造dict:
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
您的对象正在重新适应数据帧的每一列。
由于and函数的工作方式,您无意中在框架的每一列上调用了fit函数。让我们看一下下面这行发生了什么:
labeled_df = String_df.apply(LabelEncoder().fit_transform)
LabelEncoder
对象apply
传入fit\u transform
方法。对于DataFrame
中的每一列,它将调用编码器上的fit\u transform
,并将该列作为参数传入。这有两件事:A.重新安装编码器(修改其状态) B.根据编码器和新配件返回列元素的代码
encoder = LabelEncoder()
all_values = String_df.values.ravel() #convert the dataframe to one long array
encoder.fit(all_values)
labeled_df = String_df.apply(encoder.transform)
谢谢你的回答。有什么方法可以得到字符串的映射和它对应的编码标签吗?喜欢
订单/新购物车,非常感谢。但是,le.classes\uu
返回以下错误:AttributeError:'LabelEncoder'对象没有属性'classes'
,这是我的错误,抱歉。分配le=LabelEncoder
后,需要对该对象调用fit\u transform。请再次查看以“编辑”开头的零件。