想知道pd.factorize,pd.get_dummies,sklearn.preprocessing.labeencoder和OneHotEncod之间的区别

2024-09-22 16:34:49 发布

您现在位置:Python中文网/ 问答频道 /正文

这四个功能似乎都和我很相似。在某些情况下,其中一些可能会给出相同的结果,有些则不会。感谢您的帮助!

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

get_dummiesOneHotEncoder将产生相同的结果,但OneHotEncoder只能处理数字,但get_dummies将接受各种输入。get_dummies将为每个列输入自动生成新列名,但OneHotEncoder不会(而是将分配新列名1、2、3….)。所以get_dummies在各方面都比较好。

如果我错了,请纠正我!谢谢您!


Tags: 数据功能get方式时间情况数字差异
1条回答
网友
1楼 · 发布于 2024-09-22 16:34:49

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

  • 将标签编码为分类变量:Pandasfactorize和scikit learnLabelEncoder。结果将有1维。
  • 将分类变量编码为伪/指示符(二进制)变量:Pandasget_dummies和scikit learnOneHotEncoder。结果将有n个维度,每个维度由编码的分类变量的不同值组成。

pandas和scikit-learn编码器的主要区别在于scikit-learn编码器被用于带有fittransform方法的scikit-learn管道中。

将标签编码为分类变量

熊猫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属于第二类。它们可以用来创建二进制变量。OneHotEncoder只能与分类整数一起使用,而get_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

我还根据这个答案写了一个更详细的post

相关问题 更多 >