手里拿到一份表格或一批文本,准备丢给模型做总结、分类或者问答,结果发现空行一堆、日期格式五花八门、同一家公司写了三种名字——这就是要面对数据清洗的场景。这篇把数据清洗拆成几个能落地的动作,帮你判断哪些必须做、哪些可以跳过,以及清洗没做干净时模型会表现成什么样。
手里拿到一份表格或一批文本,准备丢给模型做总结、分类或者问答,结果发现空行一堆、日期格式五花八门、同一家公司写了三种名字——这就是要面对数据清洗的场景。它不是一个高深概念,更像做饭前的择菜洗菜:不洗也能下锅,但成品好坏差别很大。
这篇把数据清洗拆成几个能落地的动作,帮你判断哪些必须做、哪些可以跳过,以及清洗没做干净时模型会表现成什么样。全程只讲判断标准和可执行动作,具体工具和成本数字,到站内工具目录页按当时的记录去核对。
先说人话:数据清洗到底在洗什么
把原始数据里不适合直接使用的东西挑出来处理掉,这就是清洗。常见的几类问题:重复、缺失、格式不统一、明显错误、单位混用。它的目标不是让数据变得完美,而是让它变成「能稳定被程序或模型读取」的版本,同样一份输入,处理前后可重复跑出同样的结果。
- 清洗
- 在已有数据上做规则化处理,解决干不干净的问题,不改采集方式
- 标注
- 给数据补上标签或答案,解决有没有标签的问题,常和清洗一起做但目标不同
- 体检
- 动手前先统计行数、空值比例、字段取值范围,把问题列成清单
- 可重跑
- 处理规则写成脚本,数据源更新后能一键再洗一遍
什么情况下不用大动?数据源本身就是结构化且受控的,比如自家系统导出的订单表,字段含义清楚、类型稳定,通常只需要去重和补空,没必要把整张表推倒重来。反过来,来自网页抓取、多人手工填报、聊天记录这类来源,清洗工作量会明显更大。
常见步骤:一条从脏到可用的处理线
- 先做体检再动手统计行数、各列空值比例、字段取值范围,把发现的问题写成清单。目的是避免边洗边踩新坑,比如洗干净一批才发现还有一列单位混着两种写法。
- 去重与主键统一同一实体用唯一标识合并,不要靠名称字符串直接匹配。校验方式:合并后统计实体总数是否落在合理区间,抽样看有没有把不同对象错误合并。
- 缺失值分三档处理能按其他字段推出来的就推,推不出来的标成未知,整列缺失比例过高的考虑直接弃用。验证方式:处理完后再看一遍空值比例,确认每一档都有明确去处。
- 格式归一日期、金额、电话、地址统一成一种写法,中英文标点和全半角也要一起管。验证方式:用几条最怪的样本做回归,看输出是否都符合统一格式。
- 留底与日志保留原始副本,每一步改了什么记下来。验证方式:让另一个人只看日志,能复现出同一份清洗结果。
在 AI 流程里它站在哪一步、影响什么
典型顺序是:采集、清洗、切分与向量化、检索或提示拼装、模型输出。清洗在提示词之前,属于「改不动模型只能改输入」的那一环,也是普通人最容易掌控、投入产出比最高的一环。
| 场景 | 清洗不到位会怎样 | 优先处理什么 |
|---|---|---|
| 知识库问答 | 同一段内容被切成碎块、标题正文粘连,检索片段答非所问 | 切分边界、段落完整性、去页眉页脚 |
| 表格问答 | 字段名混乱,模型猜错含义,算错数 | 列名规范化、单位统一、空值标记 |
| 批量分类 | 标签体系里的同义词没合并,同类被分到几类 | 标签归一、用词表统一 |
| 文本纠错 | 把要识别的噪声也一起洗掉,模型没东西可学 | 保留噪声,只统一编码和标点 |
不适用的情况要说清:本来就是要让模型理解原始噪声的任务,比如纠错、脏文本识别、异常检测,过度清洗反而把特征洗掉了。这类任务清洗只做最基本的一层,比如编码统一和去重,其余交给模型。
洗到什么程度算够:判断标准与验收动作
- 以「下游能不能稳定跑」为准,而不是以「数据看起来美不美」为准;脚本能重复跑出同样结果,就算达标。
- 抽 20 到 30 条样本人工过一遍,重点看边界情况:最长的那条、全空的那条、格式最怪的那条。
- 清洗脚本要可重跑、可版本化,数据源更新后一键再洗,而不是每次手动改表格。
- 什么时候该停:再往下洗的收益已经小于维护成本,或者清洗开始明显改变业务含义,就该停手并记录已知缺陷。
判断「洗够了」还有一个实用信号:把清洗后的数据交给模型跑一遍核心任务,如果输出稳定、错误集中在模型能力而不是输入格式上,就可以先上线,把剩余问题记成待办而不是卡在原地。
下一步如果你要选工具或比对不同方案的落地成本,到站内工具目录和评测页面按当时的记录核对,再决定用哪种清洗流程。→常见问题
数据清洗和数据分析是一回事吗?
不是。清洗是让数据变得可用,数据分析是在可用数据上找结论。清洗属于前置工序,做完才能谈统计和看趋势;如果跳过清洗直接分析,结论很可能被重复行或缺失值带偏。
数据量不大,是不是手动在表格里改改就行?
小样本一次性处理可以,但只要有下一次更新就不划算。手动改的问题是不可复现,第二个人接手时不知道哪些值被改过。哪怕只有几百行,也建议写成脚本并留下清洗日志。
清洗后的数据要全部喂给模型吗?
不一定。清洗只保证数据可用,要不要全给取决于上下文容量和任务本身。多数情况是先清洗、再筛选和切分,只把和当前问题相关的部分送进模型,具体取舍可以对照站内关于上下文与检索的页面。