python-machine-learning-book实战:用Pandas处理缺失值

【免费下载链接】python-machine-learning-book python-machine-learning-book: 是一个基于 Python 的机器学习教程和示例代码库,介绍了各种机器学习算法和实现方法。适合开发者、研究者和对机器学习感兴趣的人员学习并使用 Python 实现各种机器学习任务。 【免费下载链接】python-machine-learning-book 项目地址: https://gitcode.com/gh_mirrors/py/python-machine-learning-book

在机器学习项目中,缺失值是数据预处理阶段最常见的挑战之一。不合理的缺失值处理可能导致模型性能下降或得出错误结论。本文基于python-machine-learning-book项目,详细介绍如何使用Pandas(Python数据分析库)识别和处理缺失值,帮助你构建更可靠的训练数据。项目中完整的缺失值处理理论可参考官方文档

缺失值的识别与分析

在处理缺失值前,首先需要准确识别数据中的缺失值位置和数量。Pandas提供了直观的方法来检测缺失值。

1. 加载数据与初步检查

使用Pandas读取数据后,可以通过isnull().sum()方法统计各列缺失值数量:

import pandas as pd
from io import StringIO

# 示例CSV数据(含缺失值)
csv_data = '''A,B,C,D
1.0,2.0,3.0,4.0
5.0,6.0,,8.0
10.0,11.0,12.0,'''

df = pd.read_csv(StringIO(csv_data))
print(df.isnull().sum())  # 输出各列缺失值数量

上述代码来自项目中的数据预处理示例,执行后会显示每列的缺失值计数,例如:

A    0
B    0
C    1
D    1
dtype: int64

2. 缺失值可视化分析

虽然项目中未直接提供缺失值可视化工具,但可以结合Pandas和Matplotlib绘制缺失值分布热力图(需自行实现)。对于大型数据集,建议先通过统计方法定位缺失值集中的特征,再决定处理策略。

删除法:快速处理缺失值

删除法是最简单直接的缺失值处理方式,适用于数据量较大且缺失比例较低的场景。Pandas提供了dropna()方法实现删除操作。

1. 删除含缺失值的行

使用df.dropna()删除所有包含缺失值的行:

# 删除所有含缺失值的行
df_drop_rows = df.dropna()
print(df_drop_rows)

执行结果会保留完整样本:

     A    B    C    D
0  1.0  2.0  3.0  4.0

2. 删除含缺失值的列

当某列缺失值比例过高(如超过50%),可考虑删除整列:

# 删除所有含缺失值的列
df_drop_cols = df.dropna(axis=1)
print(df_drop_cols)

执行结果会保留无缺失值的特征列:

      A     B
0   1.0   2.0
1   5.0   6.0
2  10.0  11.0

3. 高级删除策略

Pandas还支持更灵活的删除条件,例如:

# 仅删除全为缺失值的行
df.dropna(how='all')

# 保留至少有4个非缺失值的行
df.dropna(thresh=4)

# 仅删除指定列(如'C')含缺失值的行
df.dropna(subset=['C'])

这些方法在项目的数据预处理章节中有详细演示,可根据实际数据特征选择合适的策略。

填充法:保留数据的完整性

填充法通过统计值或模型预测来填补缺失值,能最大程度保留原始数据分布。python-machine-learning-book中推荐了多种填充策略,以下是基于Pandas的实现方法。

1. 均值/中位数填充

使用特征列的均值或中位数填充缺失值,适用于数值型数据:

# 均值填充
df_fill_mean = df.fillna(df.mean())
# 中位数填充
df_fill_median = df.fillna(df.median())

项目中使用Scikit-learn的Imputer类实现类似功能(见代码示例),但Pandas的fillna()方法更简洁:

from sklearn.preprocessing import Imputer
imr = Imputer(missing_values='NaN', strategy='mean', axis=0)
imputed_data = imr.fit_transform(df.values)

2. 前向/后向填充

对于时序数据,可使用相邻样本的值填充:

# 前向填充(使用上一行值)
df_fill_ffill = df.fillna(method='ffill')
# 后向填充(使用下一行值)
df_fill_bfill = df.fillna(method='bfill')

3. 自定义值填充

根据业务逻辑填充特定值,例如用0填充订单金额缺失值:

df_fill_custom = df.fillna({'C': 0, 'D': 999})

实战案例:房价数据集缺失值处理

以项目中的房价数据集(datasets/housing目录)为例,完整演示缺失值处理流程:

  1. 加载数据
df_housing = pd.read_csv('datasets/housing/housing.csv')
  1. 分析缺失值
missing_count = df_housing.isnull().sum()
missing_ratio = missing_count / len(df_housing)
missing_df = pd.DataFrame({'count': missing_count, 'ratio': missing_ratio})
print(missing_df[missing_df['count'] > 0])
  1. 选择处理策略
  • 对于少量缺失的数值列(如total_bedrooms),使用中位数填充:
df_housing['total_bedrooms'].fillna(df_housing['total_bedrooms'].median(), inplace=True)
  • 对于缺失比例高的类别列,可创建"缺失值"类别:
df_housing['ocean_proximity'].fillna('missing', inplace=True)

总结与最佳实践

处理缺失值需遵循"具体问题具体分析"原则,根据数据特点选择合适方法:

方法 优点 缺点 适用场景
删除法 简单快速 丢失数据信息 数据量大、缺失率低
均值填充 计算简单 改变数据分布 近似正态分布的数值特征
中位数填充 抗异常值干扰 忽略特征相关性 含异常值的数值特征
模型预测填充 精度高 计算复杂 缺失率高且重要的特征

项目中更多缺失值处理技巧可参考官方FAQ。实际应用中,建议结合多种方法并通过交叉验证评估处理效果,确保模型对缺失值处理的鲁棒性。

通过本文介绍的Pandas方法,你可以高效处理python-machine-learning-book及实际项目中的缺失值问题,为后续模型训练奠定坚实的数据基础。

【免费下载链接】python-machine-learning-book python-machine-learning-book: 是一个基于 Python 的机器学习教程和示例代码库,介绍了各种机器学习算法和实现方法。适合开发者、研究者和对机器学习感兴趣的人员学习并使用 Python 实现各种机器学习任务。 【免费下载链接】python-machine-learning-book 项目地址: https://gitcode.com/gh_mirrors/py/python-machine-learning-book

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐