这四种编码器可以分为两类:
- 将 标签 编码 为分类变量 :Pandas
factorize
和scikit-learnLabelEnprer
。结果将具有1维。 - 将 分类变量 编码 为伪/指标(二进制)变量 :Pandas
get_dummies
和scikit-learnOneHotEnprer
。结果将具有n个维,一个维是编码的分类变量的不同值。
熊猫和scikit-learn编码器之间的主要区别在于,使用和方法将scikit-learn编码器用于 scikit-learn管道
。
fit``transform
将标签编码为分类变量
熊猫
factorize和scikit-learn
LabelEnprer属于第一类。它们可用于创建分类变量,例如将字符转换为数字。
from sklearn import preprocessing # Test datadf = Dataframe(['A', 'B', 'B', 'C'], columns=['Col']) df['Fact'] = pd.factorize(df['Col'])[0]le = preprocessing.LabelEnprer()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
OneHotEnprer属于第二类。它们可用于创建二进制变量。
OneHotEnprer只能与分类整数一起使用,而
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.0from sklearn.preprocessing import OneHotEnprer, LabelEnprerdf = Dataframe(['A', 'B', 'B', 'C'], columns=['Col'])# We need to transform first character into integer in order to use the oneHotEnprerle = preprocessing.LabelEnprer()df['Col'] = le.fit_transform(df['Col'])enc = oneHotEnprer()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
我也 根据此答案写了更详细的文章。



