Python打卡Day5

离散特征的独热编码

先按照示例代码过一遍,然后完成下列题目

现在在py文件中 一次性处理data数据中所有的连续变量和离散变量

1. 读取data数据

2. 对离散变量进行one-hot编码

3. 对独热编码后的变量转化为int类型

4.对所有缺失值进行填充

注意是py文件中,所以每一步的输出是否正确需要你来使用debugger功能来逐步查看

完整代码:

import pandas as pd
data = pd.read_csv('data.csv')
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        print(discrete_features)
data['Home Ownership'].value_counts()       
data = pd.get_dummies(data, columns=['Home Ownership'])
data.columns 
data.head()
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   
for i in list_final:
    data[i] = data[i].astype(int) # 这里的i就是独热编码后的特征名
data.head()
data.dtypes
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()   

逐步解释:

1.导入库和加载数据

import pandas as pd  # 导入pandas数据处理库
data = pd.read_csv('data.csv')  # 读取名为data.csv的数据文件

2.找出所有文本类型的列(离散变量)

# 遍历每一列,检查是否是文本类型(object)
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        print(discrete_features)  # 打印出列名

3.查看"Home Ownership"列的具体内容

data['Home Ownership'].value_counts()  # 统计这一列中每个值出现的次数

4.对"Home Ownership"列进行独热编码

data = pd.get_dummies(data, columns=['Home Ownership'])  # 把这一列转换成多个0/1的列
# 例如:如果有"租房"和"买房"两个值,会变成两列:Home Ownership_租房和Home Ownership_买房

5.转换数据类型

data['Home Ownership_Have Mortgage'] = data['Home Ownership_Have Mortgage'].astype(int)
# 把新生成的列从True/False转换成1/0

6.重新加载数据(从头开始处理)

data = pd.read_csv("data.csv")  # 重新读取原始数据

7.找出所有文本列

discrete_lists = []  # 创建一个空列表
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        discrete_lists.append(discrete_features)  # 把所有文本列名加入列表

8.对所有文本列进行独热编码

data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)
# drop_first=True表示省略第一个类别(防止多重共线性)

9.找出所有新生成的列

data2 = pd.read_csv("data.csv")  # 再次读取原始数据用于比较
list_final = []  # 新列名列表
for i in data.columns:
    if i not in data2.columns:  # 如果列名在原始数据中不存在
       list_final.append(i)  # 说明是新生成的列,加入列表

10.转换所有新列为整数

for i in list_final:
    data[i] = data[i].astype(int)  # 把True/False转为1/0

11.处理缺失值

for i in data.columns:
    if data[i].isnull().sum() > 0:  # 如果这列有缺失值
       mean_value = data[i].mean()  # 计算这列的平均值
       data[i].fillna(mean_value, inplace=True)  # 用平均值填充缺失值

12.检查是否还有缺失值

data.isnull().sum()  # 统计每列的缺失值数量(应该都是0了)

总结 :这段代码主要做了三件事:

1. 找出所有文本列并进行独热编码(变成多个0/1的列)
2. 把所有新生成的列转换成整数类型
3. 用平均值填充所有缺失值

注:

  • 独热编码是把"猫/狗/鸟"这样的文字变成"是否猫(1/0)","是否狗(1/0)","是否鸟(1/0)"多个列
  • 处理缺失值就像填空考试,不知道答案就填个平均分

编程的世界没有银弹,多尝试、多踩坑才能成长。加油!!!

@浙大疏锦行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值