核心概念 数据清洗(Data Cleaning)是指检测、纠正或删除数据集中不准确、不完整、不合理或重复的记录,使数据干净、一致、可用的过程。它是数据预处理的关键步骤,也是特征工程的基石。
简单来说:垃圾进,垃圾出 —— 没有高质量的数据清洗,再优秀的模型也无法产生可靠的结果。
数据清洗直接影响数据分析与机器学习的质量。以下是清洗带来的核心价值:
| 维度 | 清洗前 | 清洗后 |
|---|---|---|
| 准确率 | 78% (含缺失/异常) | 94% (清洗后) |
| 训练时间 | 45秒 (含重复) | 28秒 (去重后) |
| 可解释性 | 混乱,难以理解 | 清晰,趋势明显 |
数据清洗主要针对以下四类问题:缺失值 异常值 重复值 不一致数据
| 问题类型 | 描述 | 常见场景 | 清洗策略 |
|---|---|---|---|
| 缺失值 | 数据集中某些字段为空或不存在 | 用户未填写年龄、传感器丢包 | 删除、均值/中位数填充、插值 |
| 异常值 | 数值明显偏离正常分布 | 收入为负数、年龄200岁 | 截断、分箱、盖帽法、模型检测 |
| 重复值 | 完全相同的记录出现多次 | 系统重复导入、用户多次提交 | 去重(drop_duplicates) |
| 不一致数据 | 格式、单位、命名不统一 | 日期格式混用、性别“男/M/1” | 标准化、映射、正则转换 |
🐍 Python 快速处理示例:
# 缺失值处理 df.dropna(subset=['age']) # 删除缺失行 df['age'].fillna(df['age'].median()) # 中位数填充 # 异常值处理 (IQR) Q1, Q3 = df['price'].quantile([0.25, 0.75]) iqr = Q3 - Q1 df = df[(df['price'] >= Q1 - 1.5*iqr) & (df['price'] <= Q3 + 1.5*iqr)] # 重复值处理 df.drop_duplicates(inplace=True) # 不一致数据 (性别映射) gender_map = {'男': 'M', 'male': 'M', '女': 'F', 'female': 'F'} df['gender'] = df['gender'].map(gender_map).fillna('其他')
⬆️ 四大问题按顺序清洗,最终获得高质量数据集 ⬆️