这四个功能似乎与我真的很相似。在某些情况下,其中一些可能会给出相同的结果,而有些则不会。任何帮助将不胜感激!
现在,我知道了,并且我在内部假设了这一点,factorize并且LabelEncoder以相同的方式工作,并且在结果方面没有太大差异。我不确定它们是否会占用大量数据的相似时间。
factorize
LabelEncoder
get_dummies并且OneHotEncoder会产生相同的结果,但OneHotEncoder只能处理数字,但get_dummies会接受各种输入。get_dummies将为每个列输入自动生成新的列名称,但OneHotEncoder不会(而是分配新的列名称1,2,3 ....)。因此get_dummies在各个方面都更好。
get_dummies
OneHotEncoder
如果我错了,请纠正我!谢谢!
这四种编码器可以分为两类:
熊猫和scikit-learn编码器之间的主要区别在于,使用和方法将scikit-learn编码器用于 scikit-learn管道 。fit``transform
fit``transform
熊猫factorize和scikit-learnLabelEncoder属于第一类。它们可用于创建分类变量,例如将字符转换为数字。
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- learnOneHotEncoder属于第二类。它们可用于创建二进制变量。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
我也 根据此答案写了更详细的文章。