如何依次标记熊猫中的类别变量?

时间:2019-01-10 01:08:28

标签: python pandas machine-learning scikit-learn data-cleaning

我有一个pandas数据框,左侧有以下类别的变量作为列,右侧是其具体实现,

enter image description here

(对低分辨率表示歉意。)

对于统计回归,我想标记所有这些分类变量,例如,在LotShape中,Reg变成0IR1变成{{ 1}},1 IR22 IR3。我发现scikit-learn的3可以完成job,但是有一个问题。其中一些分类变量是隐式有序的,并且LabelEncoder0,...需要分配给正确的标签,而1恰好是按顺序排列的。

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

2 个答案:

答案 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'))