题目:离散特征的独热编码
先按照示例代码过一遍,然后完成下列题目
现在在py文件中 一次性处理data数据中所有的连续变量和离散变量
1. 读取data数据
2. 对离散变量进行one-hot编码
3. 对独热编码后的变量转化为int类型
4. 对所有缺失值进行填充
# 1. 读取data数据
import pandas as pd
data = pd.read_csv(r'data.csv')
data2 = pd.read_excel(r'data.xlsx')
# 2. 对离散变量进行one-hot编码
#找到列表中所有的离散列名,存储到新建的列表当中
discrete_lists = []
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object':
discrete_lists.append(discrete_features)
#对所有的离散特征独热编码,编码后的值均转换为布尔值(TRUE OR FALSE)
data = pd.get_dummies(data , columns = discrete_lists , drop_first=True)
# 3. 转换独热编码到int类型
#找出所有独热编码后data.columns的新添加的列,为后续类型转换做准备
list2 = []
for i in data.columns:
if i not in data2.columns:
list2.append(i)
#遍历所有独热编码后的列进行int类型转换
for a in list2:
data[a] = data[a].astype(int)
# 4. 填补每一列的缺失值
for b in data.columns:
# if data[b].dtype != 'object':
if data[b].isnull().sum() > 0:
data[b].fillna(data[b].median(),inplace = True)
print(data.isnull().sum())
独热编码笔记
一.离散变量识别与独热编码
1. 离散列自动识别
discrete_lists = []
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object':
discrete_lists.append(discrete_features)
逻辑分析:
(1)遍历所有列名
(2)通过dtype == 'object'识别文本型离散变量
(3)添加并存储到discrete_lists列表中
2. 独热编码实现
data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)
参数解析:
(1)columns:指定需要编码的列
(2)drop_first=True:避免虚拟变量陷阱(删除第一类)
输出特性:
(1)自动生成"列名_类别值"的新列
(2)编码值为布尔类型(True/False)
二. 数据类型转换
1. 新列识别逻辑
list2 = []
for i in data.columns:
if i not in data2.columns:
list2.append(i)
实现目的:
(1)对比编码前后的列名差异
(2)识别出所有新生成的独热编码列并存储到list2列表中
2. 类型转换处理
for a in list2:
data[a] = data[a].astype(int)
技术细节:
(1)将布尔值(True/False)转换为整型(1/0)
(2)使用astype(int)进行转换
三.独热编码流程