day5 Pandas离散特征处理与数据完善

在数据处理与分析中,离散特征的处理是关键环节。离散特征具有不同的取值类别,如客户的性别、房屋所有权状态等,合理处理这些特征能为后续的数据分析和建模奠定良好基础。本文将围绕 Pandas 库,详细介绍离散特征的处理方法,包括数据读取、特征识别、独热编码、类型转换以及缺失值填充等内容。

一、数据读取与离散特征识别

1.1 数据读取

在 Python 中借助 Pandas 库,可轻松读取各类数据文件。以下以常见的 CSV 文件为例:

import pandas as pd
data = pd.read_csv('data.csv')

上述代码导入 pandas 库后,使用 read_csv 函数从 data.csv 文件中读取数据,将其存储于 data 这个 DataFrame 对象中,方便后续操作。

1.2 离散特征识别

在 Pandas 里,数据类型为 object 的列通常可视为离散特征列。通过以下代码可找出数据集中所有离散特征:

discrete_lists = []
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        discrete_lists.append(discrete_features)

此段代码先创建一个空列表 discrete_lists,用于存放离散特征列名。随后遍历 data 的所有列名,对每列数据类型进行判断,若为 object 类型,便将其列名添加至 discrete_lists 中。

二、离散特征独热编码

2.1 单个离散特征的独热编码

以 Home Ownership(房屋所有权)这一离散特征为例,使用 get_dummies 函数进行独热编码:

data = pd.get_dummies(data, columns=['Home Ownership'])

get_dummies 函数会将 Home Ownership 列中每个不同取值转化为新的列,用 0 和 1 来表示样本是否属于该类别。例如,Home Ownership 有 Rent(租房)、Own Home(拥有自有住房)、Have Mortgage(有抵押贷款)等取值,编码后会新增对应列,若样本属于 Rent 类别,Home Ownership_Rent 列对应位置为 1,其他相关列则为 0 。

2.2 所有离散特征的独热编码

利用循环可对所有离散特征进行独热编码:

data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)

这里依旧使用 get_dummies 函数,对 discrete_lists 列表中存储的所有离散特征列进行独热编码。drop_first=True 参数的作用是删除每个特征的第一个类别,这有助于避免多重共线性问题,使编码后的数据更利于后续分析与建模。

三、独热编码后的数据类型转换

独热编码后的数据默认多为 bool 类型,而部分函数计算可能不支持该类型,因此需将其转换为 int 类型。可通过以下方式实现:

list_final = []
for i in data.columns:
    if i not in data2.columns:
       list_final.append(i)
for i in list_final:
    data[i] = data[i].astype(int)

上述代码先找出独热编码后新增的特征名,存储在 list_final 列表中。然后遍历该列表,使用 astype 方法将对应列的数据类型由 bool 转换为 int ,确保数据类型符合后续计算要求。

四、缺失值填充

4.1 缺失值统计

使用 isnull 结合 sum 方法可统计每列缺失值数量:

data.isnull().sum()

isnull 方法会返回一个与原数据同维度的布尔矩阵,标记出缺失值位置,True 表示对应位置为缺失值;sum 方法则对布尔矩阵每列进行求和,由于 True 对应数值为 1,False 对应数值为 0 ,所以求和结果即为每列缺失值数量。

4.2 缺失值填充

这里采用均值填充法,对存在缺失值的列进行处理:

for i in data.columns:
    if data[i].isnull().sum() > 0:
        mean_value = data[i].mean()
        data[i].fillna(mean_value, inplace=True)

代码遍历数据的所有列,当某列缺失值数量大于 0 时,计算该列均值,再使用 fillna 方法以均值填充缺失值。inplace=True 参数确保填充操作直接在原始数据上进行修改。

五、完整代码整合

import pandas as pd

# 1. 读取数据
data = pd.read_csv('data.csv')

# 2. 找到离散变量
discrete_lists = []
for discrete_features in data.columns:
    if data[discrete_features].dtype == 'object':
        discrete_lists.append(discrete_features)

# 3. 离散变量独热编码
data = pd.get_dummies(data, columns=discrete_lists, drop_first=True)

# 4. 找出独热编码后新增特征名并转换类型
list_final = []
for i in data.columns:
    if i not in data.columns:
       list_final.append(i)
for i in list_final:
    data[i] = data[i].astype(int)

# 5. 填补每一列的缺失值
for i in data.columns:
    if data[i].isnull().sum() > 0:
        mean_value = data[i].mean()
        data[i].fillna(mean_value, inplace=True)

通过以上步骤,我们完成了对数据集中离散特征的全面处理,涵盖数据读取、特征识别、编码转换以及缺失值填充等关键环节。这些操作是数据预处理的重要组成部分,能有效提升数据质量,为后续的数据分析、机器学习模型训练等工作提供有力支持。希望读者通过本文的学习,能熟练掌握离散特征处理技巧,在实际数据项目中灵活运用。

@浙大疏锦行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值