zoukankan      html  css  js  c++  java
  • 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
    

      

      

  • 相关阅读:
    java继承
    Linux下word转pdf以及unoconv中文乱码问题
    jquery点击事件捕获
    在Windows上玩TensorFlow(一)——安装Docker【转】
    php面试总结
    [转载] PHP 线程,进程和并发
    微信小程序数据解密
    sql基础整理
    PHP 底层的运行机制与原理【转载】
    react-native 运行原理【转载】
  • 原文地址:https://www.cnblogs.com/Cheryol/p/13416008.html
Copyright © 2011-2022 走看看