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

浙公网安备 33010602011771号