---
name: util-data-clean
description: "表格数据清洗：识别脏数据、去重、统一格式、补缺失值、输出清洗报告。"
---

# 表格数据清洗

## 触发场景

用户给一份 Excel/CSV 表格，要「整理一下」「去掉重复的」「格式统一」「数据有问题帮看看」时使用。
也适用于把多个表格合并、把乱七八糟的原始数据整理成能分析的格式。

## 先做体检（不要直接动手改）

**拿到数据第一件事：先出一份「体检报告」，别急着改。**

| 检查项 | 怎么查 |
|---|---|
| 总行数/列数 | 看清数据规模 |
| 每列类型 | 文本/数字/日期，有没有混装 |
| 空值 | 每列有多少空、空在哪 |
| 重复行 | 完全重复 + 关键字段重复 |
| 异常值 | 明显不合理的数字（年龄 300、金额负数） |
| 格式混乱 | 日期有多套写法、单位不统一、全半角混用 |

先把体检结果给用户看，**确认哪些要改再动手**。

## 一、常见脏数据与处理

### 1. 空值

| 情况 | 处理 |
|---|---|
| 关键字段空（如订单号） | 无法补，标记为「需人工确认」单独列出 |
| 可推算的（如缺省份但有城市） | 按规则补 |
| 数值型少量缺失 | 补 0 要慎重，问用户；补均值适合做统计不适合做明细 |
| 大量缺失 | **不要硬补**，报告给用户决策 |

### 2. 重复

- **完全重复**：直接去重，保留第一条
- **关键字段重复、其他不同**：不能直接删，要列出让用户判断（可能是同一客户多次下单）
- 去重前**先备份原数据**

### 3. 格式不统一

| 问题 | 例子 | 统一为 |
|---|---|---|
| 日期 | 2026/1/5、2026-01-05、26年1月5日 | 统一 ISO：2026-01-05 |
| 手机号 | 带空格、带横线、带 +86 | 纯 11 位数字 |
| 金额 | ¥1,200、1200元、1,200.00 | 纯数字 1200.00 |
| 全半角 | ＡＢＣ vs ABC、１２３ vs 123 | 统一半角 |
| 空格 | 首尾空格、中间多个空格 | 去首尾、中间并一个 |
| 大小写 | beijing / Beijing / BEIJING | 统一一种 |

### 4. 异常值

- 明显超出范围的（年龄 -5、日期 2099）
- **不要直接删**，单独列出来问用户
- 逐个确认是错误还是真实情况（有些「异常」是真的）

## 二、清洗步骤（按序执行）

```
1. 备份原文件（务必） 
2. 去首尾空格、统一全半角
3. 统一日期格式
4. 统一分类字段写法（省份/性别/状态等）
5. 数值列转成纯数字（去单位、去千分位）
6. 处理空值（按上面规则）
7. 去重
8. 处理异常值（列出来，不擅自删）
9. 输出清洗后文件 + 清洗报告
```

## 三、输出两份东西

### 1. 清洗后的数据文件

- 保留原列，新增一列 `数据标记`（注明该行是否被修改/存疑）
- 不要静默改数据，改了什么要能追溯

### 2. 清洗报告

```
【原始数据】
行数：X  列数：Y

【发现的问题】
- 空值：A 列 12 个、B 列 3 个
- 重复：完全重复 5 行；订单号重复 2 组
- 格式问题：日期 3 种写法、金额带单位 47 处
- 异常值：年龄列有 2 个 300+

【已处理】
- 统一日期格式 ✅
- 去重 5 行 ✅
- 去空格/全半角 ✅

【未处理（需你确认）】
- 订单号重复 2 组，详见「待确认」表
- X 列 12 个空值，是否可留空？

【下一步建议】
- ……
```

## 注意

- **先备份，再动手**。改错了能回退。
- **不擅自删数据**。异常值、重复值都先列出来，让用户定。
- **不做假**：不要为了「数据好看」去填假数字。
- 涉及个人信息（身份证、手机号）的，提醒用户注意脱敏和合规。
