python – 适合Pandas df的LabelEncoder顺序

我在大熊猫
df的一个专栏上安装scikit-learn
LabelEncoder.

如何确定遇到的字符串映射到整数的顺序?这是确定性的吗?

更重要的是,我可以指定此订单吗?

import pandas as pd
from sklearn import preprocessing

df = pd.DataFrame(data=["first", "second", "third", "fourth"], columns=['x'])
le = preprocessing.LabelEncoder()
le.fit(df['x'])
print list(le.classes_)
### this prints ['first', 'fourth', 'second', 'third']
encoded = le.transform(["first", "second", "third", "fourth"]) 
print encoded
### this prints [0 2 3 1]

我希望le.classes_为[“first”,“second”,“third”,“4th”],然后编码为[0 1 2 3],因为这是字符串出现在列中的顺序.可以这样做吗?

最佳答案 它按排序顺序完成.在字符串的情况下,它按字母顺序完成.没有相关的文档,但是查看
LabelEncoder.transform的源代码,我们可以看到工作主要委托给函数
numpy.setdiff1d,其中包含以下文档:

Find the set difference of two arrays.

Return the sorted, unique values in ar1 that are not in ar2.

(强调我的).

请注意,由于未记录,因此可能已实现实现,并且可以在不同版本之间进行更改.可能只是我看起来的版本使用排序顺序,而其他版本的scikit-learn可能会改变这种行为(通过不使用numpy.setdiff1d).

点赞