說明:本片博文接上篇博文【 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
