Python 想知道pd.factorize、pd.get_假人、sklearn.preprocessing.LableEncoder和OneHotEncoder之间的区别吗

Python 想知道pd.factorize、pd.get_假人、sklearn.preprocessing.LableEncoder和OneHotEncoder之间的区别吗,python,pandas,encoding,machine-learning,scikit-learn,Python,Pandas,Encoding,Machine Learning,Scikit Learn,这四种功能似乎都与我非常相似。在某些情况下,其中一些可能会给出相同的结果,而另一些则不会。感谢您的帮助 现在我知道了,并且我假设在内部,factorize和LabelEncoder以相同的方式工作,并且在结果方面没有很大的差异。我不确定它们是否会占用大量数据的类似时间 get\u dummies和onehotcoder将产生相同的结果,但是onehotcoder只能处理数字,但是get\u dummies将接受各种输入get_dummies将为每个列输入自动生成新列名,但onehotcoder不

这四种功能似乎都与我非常相似。在某些情况下,其中一些可能会给出相同的结果,而另一些则不会。感谢您的帮助

现在我知道了,并且我假设在内部,
factorize
LabelEncoder
以相同的方式工作,并且在结果方面没有很大的差异。我不确定它们是否会占用大量数据的类似时间

get\u dummies
onehotcoder
将产生相同的结果,但是
onehotcoder
只能处理数字,但是
get\u dummies
将接受各种输入
get_dummies
将为每个列输入自动生成新列名,但
onehotcoder
不会(它将指定新列名1,2,3…)。因此,
get_dummies
在各个方面都更好


如果我错了,请纠正我!谢谢大家!

这四个编码器可分为两类:

  • 标签编码到分类变量中:熊猫
    因子分解
    和scikit学习
    标签编码
    。结果将有一个维度
  • 将分类变量编码为虚拟/指示器(二进制)变量:Pandas
    get_dummies
    和scikit learn
    onehotcoder
    。结果将有n个维度,一个维度由编码的分类变量的不同值决定
pandas和scikit学习编码器之间的主要区别在于,scikit学习编码器用于scikit学习管道,采用
fit
transform
方法

将标签编码为分类变量 熊猫
factorize
和scikit learn
LabelEncoder
属于第一类。它们可用于创建分类变量,例如将字符转换为数字

from sklearn import preprocessing    
# Test data
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])    
df['Fact'] = pd.factorize(df['Col'])[0]
le = preprocessing.LabelEncoder()
df['Lab'] = le.fit_transform(df['Col'])

print(df)
#   Col  Fact  Lab
# 0   A     0    0
# 1   B     1    1
# 2   B     1    1
# 3   C     2    2
将分类变量编码为伪/指示符(二进制)变量 熊猫
get_dummies
和scikit learn
OneHotEncoder
属于第二类。它们可以用来创建二进制变量
onehotcoder
只能用于分类整数,而
get\u dummies
可以用于其他类型的变量

df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
df = pd.get_dummies(df)

print(df)
#    Col_A  Col_B  Col_C
# 0    1.0    0.0    0.0
# 1    0.0    1.0    0.0
# 2    0.0    1.0    0.0
# 3    0.0    0.0    1.0

from sklearn.preprocessing import OneHotEncoder, LabelEncoder
df = DataFrame(['A', 'B', 'B', 'C'], columns=['Col'])
# We need to transform first character into integer in order to use the OneHotEncoder
le = preprocessing.LabelEncoder()
df['Col'] = le.fit_transform(df['Col'])
enc = OneHotEncoder()
df = DataFrame(enc.fit_transform(df).toarray())

print(df)
#      0    1    2
# 0  1.0  0.0  0.0
# 1  0.0  1.0  0.0
# 2  0.0  1.0  0.0
# 3  0.0  0.0  1.0

我还根据这个答案写了一篇更详细的文章。

非常感谢!这是非常清楚的,所以在内部,factorize和LabelEncoder的工作方式是相同的;get_dummies和OneHotEncoder将产生相同的结果,但OneHotEncoder只能处理数字,但get_dummies将正确处理各种输入?在内部,它们的工作方式不同,因为scikit learn编码器分两步工作
拟合
和变换,但它们产生相同的结果。是的,
get_dummies
将接受各种输入。回答很好-您认为您可以在性能方面给我们展示一个快速比较吗?我觉得Sklearn的LabelEncoder比Pandas Factoryzer慢很多,但这只是一种感觉。。。