数据清洗的目标不是简单删除异常行,而是把原始数据转换成符合业务定义、可以被重复验证的数据集。每个清洗规则都应该说明输入假设、转换方式和受影响行数,才能在数据源变化时快速发现问题。

核心原则

  • 读取数据后先检查行列数、字段类型、缺失比例和唯一值分布。
  • 统一列名、空白字符、大小写与日期格式,再执行匹配和聚合。
  • 根据业务含义选择填充、保留或删除缺失值,避免一刀切处理。
  • 去重前明确业务主键和保留策略,不能只依赖整行完全相同。
  • 转换数值与日期时使用 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 数据清洗实战:缺失值、重复项与类型转换的关键在于把隐含假设变成可执行的约束,并通过测试、监控和复盘持续验证。先从影响最大的真实场景开始,小步调整并保留回滚能力,通常比一次性大范围改造更安全,也更容易积累可复用的工程经验。