4-Pandas數據預處理之數據轉換(啞變量編碼pd.get_dummies())


說明:本片博文接上篇博文【 Pandas數據預處理之數據轉換(df.map()、df.replace())

二、啞變量編碼

 1、什么叫做啞變量?

  將類別型特征轉化“啞變量矩陣”或是“指標矩陣”,讓類別特征轉換成數值特征的過程。相當與標簽化和OneHOt編碼,具體可參考另一篇博文數據預處理理論5.2.2特征變換

2、啞變量將派生出那些特征?

  啞變量將會從一個含有k個不同值的特征派生出k-1個二元特征。因為在建模過程中,有k類的分類變量只需要k-1個變量將其描述,若使用k個變量將出現完全共線性的問題。

3、如何實現啞變量編碼?

  使用get_dummies()函數,指定prefix參數的值來設置前綴;

 

例:(1)使用get_dummies()對salary進行轉換。

由於原始數據中有一條salary的值為‘nme’的數據,先將該條數據進行刪除,在對salsry進行啞變量編碼:

>>> data  = pd.read_csv('C:/Users/xhl/Desktop/HR.csv',encoding = 'gbk')
>>> data = data[['number_project','left','salary']]
>>> data.head(5)
   number_project  left  salary
0               2     1     low
1               5     1  medium
2               7     1  medium
3               5     1     low
4               2     1     low

#刪掉salary為‘nme’那條記錄
>>> data = data[~data['salary'].isin(['nme'])]
>>> data.tail()
       number_project  left salary
14996               2     1    low
14997               6     1    low
14998               2     1    low
14999               2     1    low
15000               2     1    low
>>> pd.get_dummies(data['salary'])[:5]
       high  low  medium
0         0    1       0
1         0    0       1
2         0    0       1
3         0    1       0
4         0    1       0

#通過prefix設置前綴
>>> dummies=pd.get_dummies(data['salary'],prefix = 'sala
>>> dummies[:5]
   salary_high  salary_low  salary_medium
0            0           1              0
1            0           0              1
2            0           0              1
3            0           1              0
4            0           1              0

 (2)使用df.join()pd.concat()將新的啞變量編碼數據與原本未編碼的數據進行合並 

#展示全部的列
>>> pd.set_option('display.max_columns',None)

#合並數據---df.join()
>>> newdata = data[['number_project','left']].join(dummies)
>>> newdata.head()
   number_project  left  salary_high  salary_low  salary_medium
0               2     1            0           1              0
1               5     1            0           0              1
2               7     1            0           0              1
3               5     1            0           1              0
4               2     1            0           1              0
#合並數據---pd.concat()
>>> newdata1 = pd.concat([data[['number_project','left']],dummies],axis=1)
>>> newdata1[:5]
   number_project  left  salary_high  salary_low  salary_medium
0               2     1            0           1              0
1               5     1            0           0              1
2               7     1            0           0              1
3               5     1            0           1              0
4               2     1            0           1              0

 (3)若需要對DataFrame中所有的元素均進行啞變量變化,則

    >>>pd.get_dummies(data)

 (4)若僅需要對某幾個特征進行編碼,可以用columns進行指定要編碼的特征

    >>> pd.get_dummies(data,columns=['salary'])

 (5)通過drop_first = True將第一個編碼特征丟掉

>>> pd.get_dummies(data,columns=['salary'],drop_first = True)[:5]
   number_project  left  salary_low  salary_medium
0               2     1           1              0
1               5     1           0              1
2               7     1           0              1
3               5     1           1              0
4               2     1           1              0

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM