1. 程式人生 > 實用技巧 >python LabelEncoder與Get_Dummies的區別

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,專門生成一列資料。
見下面的栗子:(簡直不要太容易)

  1.  
    import numpy as np
     
    import pandas as pd
     
    data = pd.DataFrame({"學號":[1001,1002,1003,1004],
     
    "性別":["","","",""],
     
    "學歷":["本科","碩士","專科","本科"]})
     
    data
         
    學歷
    
    學號    性別
    0    本科    10011    碩士    10022    專科    10033    本科    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
注意:
輸入的應該是表示類別的數字,如果輸入文字,會報錯的。

  1.  
    from sklearn.preprocessing import OneHotEncoder
     
    OHE = OneHotEncoder()
     
    OHE.fit(data)

    會報錯,因為只能輸入數字,所以要先用LabelEncoder進行轉化

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

對因變數y不能用OneHotEncoder,要用LabelBinarizer。