pandas库:离散特征的独热编码
一、数据的读取
import pandas as pd
data = pd.read_csv('data.csv')
打印查看所有的变量:
print(data.columns)
打印结果为:
二、找到所有离散特征
接下来是离散变量的查找:
for discrete_features in data.columns:
if data[discrete_features].dtype == 'object': #此处数据类型非整型和浮点型的设定为离散变量
print(discrete_features)
找到的离散变量结果为:
三、选择一个离散特征进行独热编码
以Home Ownership为例,进行独热编码
data = pd.get_dummies(data, columns=['Home Ownership'])
data.columns
注意:pd.get_dummies() 是 Pandas 库中的一个函数,用于将分类变量转换为独热编码的形式。独热编码是一种将分类变量转换为二进制列的方法,每一列代表一个类别,若某行数据属于该类别,则对应列的值为 1,否则为 0。data 是传入的 Pandas DataFrame 对象。columns=['Home Ownership'] 指定需要进行独热编码的列名,这里是 "Home Ownership" 列。最后data = 表示将编码后的新 DataFrame 重新赋值给 data 变量。
运行结果为:
可以看到之前的Home Ownership已经被替换成了'Home Ownership_Have Mortgage','Home Ownership_Home Mortgage', 'Home Ownership_Own Home','Home Ownership_Rent'
同时独热编码后数据类型为bool类型,需要转换成int型,以防后续计算中有些函数不支持bool型
例如:下面两行代码的整体功能是把 data 里 Home Ownership_Have Mortgage 列的数据类型转换为整数类型,然后显示转换后的列数据
data['Home Ownership_Have Mortgage'] =data ['Home Ownership_Have Mortgage'].astype(int)
data['Home Ownership_Have Mortgage']
四、循环对所有离散特征进行独热编码
至此已掌握了对离散变量做独热编码的方法,接下来试着对所有离散变量做一次独热编码
# 重新读取数据
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
按照之前的做法,进行从 bool 到 int 的类型转换
for i in list_final:
data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名
data.dtypes #查看变量类型
部分运行结果如下:
可以看到类型转换已经顺利完成
五、处理缺失值
首先统计每一列的缺失值数量
data.isnull().sum()
部分运行结果如下:
此时循环遍历列表中的每一列,可以用均值来填补缺失(Day 4 中已经用过中位数和众数填补)
for i in data.columns:
if data[i].isnull().sum() > 0: # 找到存在缺失值的列
#计算该列的均值
fill_value = data[i].mean()
#用均值填充缺失值
data[i] = data[i].fillna(fill_value)
再次进行查看
data.isnull().sum()
部分运行结果如下:
说明已经完成缺失值的填补