Python 如何按顺序标记分类变量?

Python 如何按顺序标记分类变量?,python,pandas,machine-learning,scikit-learn,data-cleaning,Python,Pandas,Machine Learning,Scikit Learn,Data Cleaning,我有一个pandas数据框架,左侧列为以下分类变量,右侧列为它们的具体实现 (对低分辨率表示歉意) 对于统计回归,我想标记所有这些分类变量,例如,在LotShape中,Reg变成0,IR1变成1,IR2和IR3。我发现scikit learn的LabelEncoder可以完成这项工作,但有一个问题。其中一些分类变量是隐式顺序变量,0,1。。。需要分配给正确的标签,LotShape恰好在那里是有序的 所以我的问题是,我如何有效地,按照我指定的顺序,标记大量的分类变量?这可能会有所帮助 x= ['

我有一个pandas数据框架,左侧列为以下分类变量,右侧列为它们的具体实现

(对低分辨率表示歉意)

对于统计回归,我想标记所有这些分类变量,例如,在
LotShape
中,
Reg
变成
0
IR1
变成
1
IR2
IR3
。我发现scikit learn的
LabelEncoder
可以完成这项工作,但有一个问题。其中一些分类变量是隐式顺序变量,
0
1
。。。需要分配给正确的标签,
LotShape
恰好在那里是有序的

所以我的问题是,我如何有效地,按照我指定的顺序,标记大量的分类变量?

这可能会有所帮助

x= ['GA','TA','SA','TA','GA','TA','SA']

import numpy as np
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing.label import _encode
from sklearn.utils import column_or_1d
x = column_or_1d(x, warn=True)
classes_,encoded_values = _encode(x,uniques=np.array(['GA','TA','SA']),encode=True)
encoded_values, classes_

#(array([0, 1, 2, 1, 0, 1, 2]), ['GA', 'TA', 'SA'])

#comparing with labelencoder, which will sort the labels before encoding
le = LabelEncoder()

le.fit_transform(x),le.classes_

#
(array([0, 2, 1, 2, 0, 2, 1], dtype=int64),
 array(['GA', 'SA', 'TA'], dtype='<U2'))
x=['GA','TA','SA','TA','GA','TA','SA']
将numpy作为np导入
从sklearn.preprocessing导入标签编码器
从sklearn.preprocessing.label import\u encode
从sklearn.utils导入列_或_1d
x=列_或_1d(x,warn=True)
类,编码的值=_encode(x,uniques=np.array(['GA','TA','SA']),encode=True)
编码的值、类_
#(数组([0,1,2,1,0,1,2]),['GA','TA','SA']
#与labelencoder相比,它将在编码之前对标签进行排序
le=标签编码()
le.fit_变换(x),le.class_
#
(数组([0,2,1,2,0,2,1],dtype=int64),

数组(['GA','SA','TA'],dtype='可以使用基本python函数
list.index()
来实现此目的

以Coolio2654回答中的示例列表为例:

x= ['GA','TA','SA','TA','GA','TA','SA']
orderlist = ['GA','TA','SA']
使用
map
功能:

list(map(lambda a: orderlist.index(a), x))
或列表理解:

[orderlist.index(a) for a in x]
上述各项的输出为:

[0, 1, 2, 1, 0, 1, 2]

可以将上面的内容放入一个函数中,该函数可以为每个分类列调用。

这是一个普通的答案。我在这里看到的隐式解决方案是手动指定要在
LabelEncoder
中转换的变量的顺序。