题目:离散特征的独热编码
先按照示例代码过一遍,然后完成下列题目
现在在py文件中 一次性处理data数据中所有的连续变量和离散变量
1. 读取data数据
# 读取数据
import pandas as pd
data = pd.read_csv('data.csv') #此时data是一个DataFrame对象
data.columns
# 打印所有的离散变量名
# 在python中对于变量名常常用英文含义和下划线来命名,而不借助拼音,这是便于他人阅读和理解代码的一种习惯。
# 连续的英文是continuous,离散的英文是discrete
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object':
print(discrete_features)
2. 对离散变量进行one-hot编码
# 以Home Ownership为例,打印观察下
data['Home Ownership']
# 需要进行编码,打印这个变量的值
# vakue_counts()方法用于统计每个类别的个数,并返回一个Series对象。这个方法可以帮助我们快速了解数据集中每个类别的分布情况。
data['Home Ownership'].value_counts()
# 发现并不具备顺序关系,对Home Ownership列进行独热编码
data = pd.get_dummies(data, columns=['Home Ownership'])
data.columns
# 一次性对所有离散特征独热编码
# 重新读取数据
data = pd.read_csv("data.csv")
# 找到离散变量
discrete_lists = [] # 新建一个空列表,用于存放离散变量名
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object':
discrete_lists.append(discrete_features)
# 离散变量独热编码
data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)
data.columns
# 找到所有独热编码后的新特征名
# 对比独热编码前后的列名 即可
data2 = pd.read_csv("data.csv")
list_final = [] # 新建一个空列表,用于存放独热编码后新增的特征名
for i in data.columns:
if i not in data2.columns:
list_final.append(i) # 这里打印出来的就是独热编码后的特征名
list_final
3. 对独热编码后的变量转化为int类型
# 查看独热编码结果
data.head()
# 可以看到上面独热编码后的数据是bool类型,试着转换为int类型,因为后续可能有的函数计算不支持bool值
# 学习类型转换的方法
data['Home Ownership_Have Mortgage'] =data ['Home Ownership_Have Mortgage'].astype(int)
data['Home Ownership_Have Mortgage']
# 接着之前的,一次性对bool特征进行类型转换
for i in list_final:
data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名
data.head()
4. 对所有缺失值进行填充
# 查看每一列的类型
data.dtypes
# 统计每一列的缺失值个数
data.isnull().sum()
# 用均值填补
# 循环遍历这个列表中的每一列
for i in data.columns:
if data[i].isnull().sum() > 0: # 找到存在缺失值的列
#计算该列的均值
mean_value = data[i].mean()
#用均值填充缺失值
data[i].fillna(mean_value, inplace=True)
data.isnull().sum()