Pandas 数据清洗实战:缺失值、重复项与类型转换
数据清洗的目标不是简单删除异常行,而是把原始数据转换成符合业务定义、可以被重复验证的数据集。每个清洗规则都应该说明输入假设、转换方式和受影响行数,才能在数据源变化时快速发现问题。
核心原则
- 读取数据后先检查行列数、字段类型、缺失比例和唯一值分布。
- 统一列名、空白字符、大小写与日期格式,再执行匹配和聚合。
- 根据业务含义选择填充、保留或删除缺失值,避免一刀切处理。
- 去重前明确业务主键和保留策略,不能只依赖整行完全相同。
- 转换数值与日期时使用 errors 参数识别非法值,并单独输出异常记录。
推荐的实践步骤
可以先保留一份原始 DataFrame,只在副本上执行清洗。每一步都记录受影响行数,并用 assert 验证关键约束,例如主键非空、金额非负、状态属于允许集合。最后同时输出干净数据和异常数据,方便业务人员复核,而不是静默丢弃问题记录。
df.columns = df.columns.str.strip().str.lower()
df["email"] = df["email"].str.strip().str.lower()
df["created_at"] = pd.to_datetime(df["created_at"], errors="coerce")
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
df = df.drop_duplicates(subset=["order_id"], keep="last")
assert df["order_id"].notna().all()
示例用于说明实现思路,实际项目还应结合所使用的框架版本、部署环境和业务约束进行调整。重要配置要进入版本管理,并在测试环境验证后再发布。
常见误区
- 直接 fillna(0) 会混淆真实的零值和未知值,影响后续统计。
- 在不知道业务主键时调用 drop_duplicates,可能误删合法记录。
- 清洗过程没有质量断言,数据源字段变化后仍可能生成看似正常的结果。
上线前检查清单
- 确认“读取数据后先检查行列数、字段类型、缺失比例和唯一值分布”已经通过代码审查或运行验证。
- 确认“统一列名、空白字符、大小写与日期格式,再执行匹配和聚合”已经通过代码审查或运行验证。
- 确认“根据业务含义选择填充、保留或删除缺失值,避免一刀切处理”已经通过代码审查或运行验证。
- 确认“去重前明确业务主键和保留策略,不能只依赖整行完全相同”已经通过代码审查或运行验证。
- 为失败路径、边界条件和回滚方案准备测试或演练记录。
- 上线后观察错误率、延迟和资源消耗,确认变化符合预期。
总结
Pandas 数据清洗实战:缺失值、重复项与类型转换的关键在于把隐含假设变成可执行的约束,并通过测试、监控和复盘持续验证。先从影响最大的真实场景开始,小步调整并保留回滚能力,通常比一次性大范围改造更安全,也更容易积累可复用的工程经验。