Python 数据清洗与预处理全攻略:从入门实战到高效进阶
在数据驱动的时代,原始数据往往“脏乱差”:缺失值、重复项、数据类型错配、格式混乱……这些问题如果放任不管,模型训练准确性会大打折扣,业务决策也会走偏。本文将带你从基础工具入门,到大规模数据流的高效并行方案,结合丰富的 Python 代码示例与实践案例,帮助初学者快速上手,也为资深开发者提供深度优化思路,让你在数据清洗和预处理的道路上既有温度又有力量。
一、为什么要关注数据清洗与预处理
数据科学家经常说:“80% 的时间花在清洗数据,20% 的时间花在建模。”
清洗不彻底,模型结构再优秀也救不回糟糕的输入。
-
原始数据的常见问题
- 缺失值(Missing Values)
- 异常值(Outliers)
- 数据格式不统一(如日期字符串、数值单位)
- 重复记录(Duplicates)
- 噪声和无效字段
-
数据清洗与预处理价值
- 保证数据质量,提升后续分析和模型的可靠性
- 节省算力、加快迭代:删除冗余或无关字段后,运算更敏捷
- 提升可维护性:清晰的 pipeline 有助于团队协作和复现
二、基础篇:利用 Pandas 快速上手
Pandas 是 Python 数据清洗与预处理的“瑞士军刀”。其核心对象 DataFrame
具有直观的行列结构,非常适合表格型数据。
2.1 读取与基本探索
import pandas as pd
# 从 CSV、Excel、数据库读取
df = pd.read_csv('data/users.csv', parse_dates=['signup_date'])
print(df.info())
print(df.head())
df.info()
:查看每列的非空计数和数据类型df.describe()
:数值字段的统计摘要df.dtypes
:快速检查类型,及时转换
2.2 缺失值处理
# 统计缺失值
missing = df.isnull().sum()
print(missing[missing > 0])
# 删除缺失率高的列
thresh = len(df) * 0.5
df = df.dropna(axis=1, thresh=thresh)
# 填充缺失
df['age'] = df['age'].fillna(df['age'].median())
df['city'] = df['city'].fillna('Unknown')
.dropna(thresh=…)
:删除缺失比例超过阈值的行/列.fillna()
:用均值、中位数、众数或自定义值填补
2.3 重复值去重
# 找到重复行
dups = df.duplicated(subset=['user_id', 'email'])
print(f"重复记录:{
dups.sum()} 条")
# 去重
df = df.drop_duplicates(subset=['user_id', 'email'], keep='first')
subset
:指定关键列组合