我有一个pandas数据框,左侧有以下类别的变量作为列,右侧是其具体实现,
(对低分辨率表示歉意。)
对于统计回归,我想标记所有这些分类变量,例如,在LotShape
中,Reg
变成0
,IR1
变成{{ 1}},1
IR2
和2
IR3
。我发现scikit-learn的3
可以完成job,但是有一个问题。其中一些分类变量是隐式有序的,并且LabelEncoder
,0
,...需要分配给正确的标签,而1
恰好是按顺序排列的。
所以我的问题是,如何以指定的顺序有效地标记大量分类变量?
答案 0 :(得分:3)
为此,可以使用基本的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]
可以将上面的函数放在每个类别列中可以调用的函数。
答案 1 :(得分:2)
这可能会有所帮助。
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'))