python LabelEncoder与Get_Dummies的区别
1. pd.get_dummies() #简单&粗暴
pandas.get_dummies(data, prefix=None, prefix_sep='_', dummy_na=False, columns=None, sparse=False, drop_first=False, dtype=None)
官网文档:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.get_dummies.html
输入:array-like, Series, or DataFrame
输出:DataFrame
主要参数说明:
data : array-like, Series, or DataFrame
prefix : 给输出的列添加前缀,如prefix="A",输出的列会显示类似
prefix_sep : 设置前缀跟分类的分隔符sepration,默认是下划线"_"
一般,我们输入data就够了。如果要专门关注Nan这类东东,可设置dummy_na=True,专门生成一列数据。
见下面的栗子:(简直不要太容易)
-
import numpy as np import pandas as pd data = pd.DataFrame({"学号":[1001,1002,1003,1004], "性别":["男","女","女","男"], "学历":["本科","硕士","专科","本科"]}) data 学历 学号 性别 0 本科 1001 男 1 硕士 1002 女 2 专科 1003 女 3 本科 1004 男 pd.get_dummies(data) 学号 学历_专科 学历_本科 学历_硕士 性别_女 性别_男 0 1001 0 1 0 0 1 1 1002 0 0 1 1 0 2 1003 1 0 0 1 0 3 1004 0 1 0 0 1 pd.get_dummies(data,prefix="A") 学号 A_专科 A_本科 A_硕士 A_女 A_男 0 1001 0 1 0 0 1 1 1002 0 0 1 1 0 2 1003 1 0 0 1 0 3 1004 0 1 0 0 1 pd.get_dummies(data,prefix=["A","B"],prefix_sep="+") 学号 A+专科 A+本科 A+硕士 B+女 B+男 0 1001 0 1 0 0 1 1 1002 0 0 1 1 0 2 1003 1 0 0 1 0 3 1004 0 1 0 0 1
2. sklearn的崽一:LabelEncoder 将不连续的数字or文本进行编号
sklearn.preprocessing.LabelEncoder()
官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
此时只是将文本转化为了数字编号
from sklearn.preprocessing import LabelEncoder le = LabelEncoder() le.fit([1,5,67,100]) le.transform([1,1,100,67,5]) #输出: array([0,0,3,2,1]) array([0, 0, 3, 2, 1], dtype=int64) from sklearn import preprocessing le = preprocessing.LabelEncoder() le.fit([1, 3, 3, 7]) LabelEncoder() le.transform([1, 1, 3, 7]) #array([0, 0, 1, 2]...) le.classes_ #查看分类 #array([1, 2, 6]) le.inverse_transform([0, 0, 1, 2]) #transform的逆向 #array([1, 1, 2, 6])
array([1, 1, 3, 7])
3. sklearn的崽二:OneHotEncoder 对表示分类的数字进行编码,输出跟dummies一样
sklearn.preprocessing.OneHotEncoder(n_values=None, categorical_features=None, categories=None, sparse=True, dtype=<class ‘numpy.float64’>, handle_unknown=’error’)
官方文档:
https://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.OneHotEncoder.html
注意:
输入的应该是表示类别的数字,如果输入文本,会报错的。
-
from sklearn.preprocessing import OneHotEncoder OHE = OneHotEncoder() OHE.fit(data)
会报错,因为只能输入数字,所以要先用LabelEncoder进行转化
-
data3 = le.fit_transform(data["性别"]) OHE.fit(data3.reshape(-1,1)) OHE.transform(data3.reshape(-1,1)).toarray() array([[ 0., 1.], [ 1., 0.], [ 1., 0.], [ 0., 1.]])