飙血推荐
  • HTML教程
  • MySQL教程
  • JavaScript基础教程
  • php入门教程
  • JavaScript正则表达式运用
  • Excel函数教程
  • UEditor使用文档
  • AngularJS教程
  • ThinkPHP5.0教程

Python学习笔记:利用pd.get_dummies实现哑变量编码

时间:2022-01-05  作者:hider  

一、理论介绍

虚拟变量(dummy variable)也叫哑变量,是一种将多分类变量转换为二分变量的一种形式。

如果多分类变量有k个类别,则可以转化为k-1个二分变量。

需要有一个参照的类别。

在非线性关系的模型中,特别重要。

在模型分析时,虚拟变量都是同进同出,要么都在模型中,要么都不在模型中,不能只保留一个。

二、函数介绍

pandas 中可以利用 get_dummies() 函数进行哑变量编码。

使用语法:

域名dummies(data,  # 输入的数据框
              prefix=None, # 列名的前缀
              prefix_sep=\'_\', # 分割符 
              dummy_na=False, # 增加一列空缺值
              columns=None, # 指定要实现转换的列名
              sparse=False,
              drop_first=False, # 删除第一个类别值
              dtype=None)

三、实操

域名es转换

import pandas as pd
import numpy as np
s = 域名es(list(\'abca\'))
域名dummies(s)
\'\'\'
   a  b  c
0  1  0  0
1  0  1  0
2  0  0  1
3  1  0  0
\'\'\'

域名y_na 空缺值

s1 = [\'a\',\'b\',域名]
域名dummies(s1)
\'\'\'
   a  b
0  1  0
1  0  1
2  0  0
\'\'\'
域名dummies(s1, dummy_na=True)
\'\'\'
   a  b  NaN
0  1  0    0
1  0  1    0
2  0  0    1
\'\'\'

域名ix

prefix=\'\' 参数设置编码后的变量名,默认为:原始列名_取值。

df = 域名Frame({\'A\': [\'a\', \'b\', \'a\'], \'B\': [\'b\', \'a\', \'c\'],
                   \'C\': [1, 2, 3]})
域名dummies(df)
\'\'\'
   C  A_a  A_b  B_a  B_b  B_c
0  1    1    0    0    1    0
1  2    0    1    1    0    0
2  3    1    0    0    0    1
\'\'\'
域名dummies(df, prefix=[\'col1\', \'col2\'])
\'\'\'
   C  col1_a  col1_b  col2_a  col2_b  col2_c
0  1       1       0       0       1       0
1  2       0       1       1       0       0
2  3       1       0       0       0       1
\'\'\'

域名_first

drop_first 参数删除第一个类别,避免多重共线性。

域名dummies(域名es(list(\'abcaa\')))
域名dummies(域名es(list(\'abcaa\')), drop_first=True) # 删掉第一个

域名e

# 设置类型
域名dummies(域名es(list(\'abc\')), dtype=float) # 浮点数 1.0 0.0

6.其他

# 合并至原始数据
df = 域名(域名dummies(df.A))

域名dummies(df, columns=[\'A\'])

参考链接:什么是哑变量(虚拟变量),应用中应注意什么问题?

参考链接:域名dummies

参考链接:域名dummies 的用法

参考链接:Python对离散变量处理:哑变量编码和one-hot编码

标签:Python编程
湘ICP备14001474号-3  投诉建议:234161800@qq.com   部分内容来源于网络,如有侵权,请联系删除。