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
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.]])