Python 训练营打卡 Day 5

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()

部分运行结果如下:

 说明已经完成缺失值的填补

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值