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