首页 > 技术文章 > 4-Pandas数据预处理之数据转换(哑变量编码pd.get_dummies())

Cheryol 2020-08-01 18:40 原文

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

  

  

 

推荐阅读