Python 如何按顺序标记分类变量?
我有一个pandas数据框架,左侧列为以下分类变量,右侧列为它们的具体实现 (对低分辨率表示歉意) 对于统计回归,我想标记所有这些分类变量,例如,在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= ['
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
中转换的变量的顺序。