A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

# -*- coding: utf-8 -*-
#概念:虚拟变量,也叫哑变量和离散特征编码,可用来表示分类变量、非数量因素对分析可能产生的影响
#离散特征的取值之间有大小的意义。例如:尺寸(L、XL、XXL)
#离散特征的取值之间没有大小的意义。例如:颜色(Red,Blue,Green)、性别

#离散特征的取值之间有大小意义的处理函数:
#pandas.Series.map(dict)
#dict:映射的字典

#离散特征的取值之间没有大小意义的处理函数:
#pandas.get_dummies(data,prefix=None,prefix_sep="_",dummy_na=False,columns=None,drop_first=False)
#data:要处理的DataFrame
#prefix:列名的前缀,在多个列有相同的离散项时使用
#prefix_sep:前缀和离散值的分隔符,默认为下划线,默认即可
#dummy_na:是否把NA值(空值),作为一个离散值进行处理,默认不处理
#columns:要处理的列名,如果不指定该列,那么默认处理所有列
#drop_first:是否从备选项中删第一个,建模的时候为避免共线性(共轭性)使用

import pandas

data = pandas.read_csv("D:/workspaces/python/pythonStudy/23.csv",encoding="utf8")

#1. 根据学历处理数据:
#不同的学历之间有大小的意义,因此使用map进行处理

#从控制台看看数据源中的学历都有哪些取值:
#使用drop_duplicates查看学历这一列去重之后的情况:
data['Education Level'].drop_duplicates()


#整理如下:
"""
博士后 Post-Doc
博士 Doctorate
硕士 Master's Degree
学士 Bachelor's Degree
副学士 Associate's Degree
专业院校 Some College
职业学校 Trade School
高中 High School
小学 Grade School
"""

#定义字典:
educationLevelDict = {
                      'Post-Doc' : 9,
                      'Doctorate':8,
                      'Master\'s Degree':7,
                      'Bachelor\'s Degree':6,
                      'Associate\'s Degree':5,
                      'Some College':4,
                      'Trade School':3,
                      'High School':2,
                      'Grade School':1
                      }
data['Education Level Map'] = data['Education Level'].map(educationLevelDict)

#查看data对象的内容,可以看到已经新增了列Education Level Map(虚拟变量),该列的值是根据我们的字典来的

#2. 根据性别处理数据(ps:暂时不清楚这样处理的意义)
#性别没有大小的意义,因此使用get_dummies来处理

data['Gender'].drop_duplicates()

dummies = pandas.get_dummies(
data,
columns=['Gender'],
prefix=['Gender'],
prefix_sep="_",
dummy_na=False,
drop_first=False #保留所有的属性值
)
dummies['Gender'] = data['Gender']


1 个回复

倒序浏览
奈斯,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马