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