想知道pd.factorize,pd.get_dummies,sklearn.preprocessing.LableEncoder和OneHotEncoder之间的区别。
已关闭 。这个问题需要细节或说明。它当前不接受答案。
想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。
4年前关闭。
这四个功能似乎与我真的很相似。在某些情况下,其中一些可能会给出相同的结果,而有些则不会。任何帮助将不胜感激!
现在,我知道了,并且我在内部假设了这一点,factorize
并且LabelEncoder
以相同的方式工作,并且在结果方面没有太大差异。我不确定它们是否会占用大量数据的相似时间。
get_dummies
并且OneHotEncoder
会产生相同的结果,但OneHotEncoder
只能处理数字,但get_dummies
会接受各种输入。get_dummies
将为每个列输入自动生成新的列名称,但OneHotEncoder
不会(而是分配新的列名称1,2,3
....)。因此get_dummies
在各个方面都更好。
如果我错了,请纠正我!谢谢!
-
这四种编码器可以分为两类:
- 将 标签 编码 为分类变量 :Pandas
factorize
和scikit-learnLabelEncoder
。结果将具有1维。 - 将 分类变量 编码 为伪/指标(二进制)变量 :Pandas
get_dummies
和scikit-learnOneHotEncoder
。结果将具有n个维,一个维是编码的分类变量的不同值。
熊猫和scikit-learn编码器之间的主要区别在于,使用和方法将scikit-learn编码器用于 scikit-learn管道
。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
我也 根据此答案写了更详细的文章。
- 将 标签 编码 为分类变量 :Pandas