Excel · 第 1 篇

数据清洗与整理

“数据分析师 80% 的时间花在数据清洗上。”——这不是夸张,而是现实。

拿到一份原始数据,你会发现它充满了各种”脏东西”:重复行、空值、格式不统一、错别字、异常值…如果不先把数据洗干净,后面的分析全部白搭。


为什么数据清洗如此重要

脏数据问题 对分析的影响
重复记录 统计指标虚高(比如订单量多算了)
缺失值 计算平均值等统计量时结果失真
格式不统一 相同的数据被当成不同类别(如”北京”和”北京市”)
异常值 一条错误数据可能拉偏整体平均值
数据类型错误 数字被存成文本,无法计算

第一步:拿到数据先做什么

打开一份新的数据文件后,按以下顺序快速了解数据:

1. 看数据规模

  • Ctrl + End 跳到数据最后一行,确认数据有多少行、多少列
  • 或者在状态栏看”计数”

2. 看列名(字段)

确认每列代表什么含义。如果列名是英文或缩写,先建一张字段说明表:

列名 含义 数据类型 示例
order_id 订单编号 文本 ORD20250301001
user_id 用户编号 文本 U10023
order_date 下单日期 日期 2025-03-01
amount 订单金额 数值 258.50
city 城市 文本 上海

3. 看数据样本

随机浏览前 20 行和最后 20 行,快速感知数据质量。

4. 看基本统计量

选中数值列,状态栏会显示”求和、平均值、计数”。快速判断数据范围是否合理。


去除重复数据

方法一:使用”删除重复项”功能

操作路径数据删除重复项

步骤

  1. 选中整个数据区域(Ctrl + A
  2. 点击 数据 选项卡 → 删除重复项
  3. 勾选用于判断重复的列(通常选所有列,或仅选关键字段如”订单编号”)
  4. 点击确定,Excel 会告诉你删除了多少条重复记录

方法二:用 COUNTIF 标记重复

如果不想直接删除,而是先标记出来审查:

=COUNTIF($A$2:$A$1000, A2)
  • 结果为 1 表示唯一
  • 结果 > 1 表示有重复

然后用条件格式高亮大于 1 的行,人工审查后再决定是否删除。

方法三:用条件格式快速识别

操作路径开始条件格式突出显示单元格规则重复值

这个方法最快,但只能高亮显示,不能自动删除。

实际案例:电商订单去重

你拿到一份电商订单数据,发现有些订单编号出现了多次。可能的原因:

情况 处理方式
完全相同的行(系统 bug 导致重复写入) 直接删除重复行
订单编号相同但金额不同(退款/修改订单) 保留最新的一条
订单编号相同但日期不同(跨天支付) 根据业务逻辑判断保留哪条

处理缺失值

如何发现缺失值

方法一:使用定位功能

  1. 选中数据区域
  2. Ctrl + G(定位) → 定位条件空值
  3. Excel 会选中所有空单元格

方法二:用 COUNTBLANK 函数统计

=COUNTBLANK(B2:B1000)

统计 B 列中空值的数量。

方法三:用筛选功能

点击筛选按钮,在下拉菜单中勾选”(空白)”,快速查看所有空值行。

缺失值的处理策略

策略 适用场景 Excel 操作
删除整行 缺失比例低(<5%),且缺失随机 筛选空值行后删除
填充固定值 有合理的默认值(如”未知”) Ctrl + G → 空值 → 输入值 → Ctrl + Enter
填充前/后值 时间序列数据,空值应继承前一行 定位空值 → 输入 =A1(上一行)→ Ctrl + Enter
填充平均值 数值型数据,缺失随机 先计算平均值,再填充
保留不处理 缺失本身有业务含义(如”未填写”) 标记为”未填写”以区分

实际案例:用户信息表缺失处理

字段 缺失率 处理方案
user_id 0% 无需处理
age 15% 填充中位数(更稳健),或标记为”未知”
gender 8% 标记为”未知”
city 3% 尝试从 IP 地址反查,否则标记为”未知”
register_date 0.1% 从其他系统交叉查验

格式统一化

格式不统一是最隐蔽也最烦人的问题。同一个意思可能有 N 种写法。

文本格式统一

常见问题和解决方案

问题 示例 解决方案
多余空格 ” 北京 “ =TRIM(A2) 去除首尾空格
全角半角混用 “123” vs “123” =ASC(A2) 转为半角
大小写不一致 “Beijing” vs “BEIJING” =UPPER(A2)=LOWER(A2)=PROPER(A2)
换行符/制表符 单元格内有隐藏字符 =CLEAN(A2) 去除不可打印字符
同义词不统一 “北京”/”北京市”/”BJ” 用查找替换或 VLOOKUP 映射表

综合清洗公式

=TRIM(CLEAN(SUBSTITUTE(A2, CHAR(160), "")))

这个公式同时处理了不可打印字符、不间断空格和首尾空格。

日期格式统一

日期格式混乱是最常见的问题之一:

原始格式 统一目标
2025-03-01 2025/3/1
03/01/2025 2025/3/1
2025年3月1日 2025/3/1
20250301 2025/3/1

处理方法

  1. 选中日期列
  2. Ctrl + 1 打开”设置单元格格式”
  3. 选择”日期”类别,选择统一的日期格式
  4. 如果日期被识别为文本,用 =DATEVALUE(A2) 转换

处理”20250301”格式的文本日期

=DATE(LEFT(A2,4), MID(A2,5,2), RIGHT(A2,2))

数值格式统一

问题 解决方案
数字被存为文本 选中列 → 数据 → 分列 → 完成(强制转换)
金额带货币符号 =SUBSTITUTE(SUBSTITUTE(A2,"¥",""),"$","") * 1
百分比格式 “25%” 和 “0.25” 混用 → 统一为数值
千分位逗号 “1,234,567” → =SUBSTITUTE(A2,",","") * 1

文本处理技巧

分列(Text to Columns)

场景:一列”姓名-部门”需要拆成两列。

操作路径数据分列 → 选择分隔符(如”-“)

合并(CONCATENATE / &)

场景:把”年”、”月”、”日”三列合并成一个日期。

=A2 & "-" & B2 & "-" & C2

或使用 TEXTJOIN(Excel 2019+):

=TEXTJOIN("-", TRUE, A2, B2, C2)

提取文本

需求 公式
提取前 4 个字符 =LEFT(A2, 4)
提取后 3 个字符 =RIGHT(A2, 3)
提取中间字符 =MID(A2, 5, 3) — 从第 5 位开始取 3 个字符
提取数字 需要用嵌套公式或 VBA
查找特定文本位置 =FIND("@", A2) — 返回”@”的位置

实际案例:从邮箱提取域名

=MID(A2, FIND("@", A2) + 1, LEN(A2) - FIND("@", A2))
原始邮箱 提取结果
[email protected] gmail.com
[email protected] company.cn

数据验证

数据清洗完成后,需要验证清洗结果是否正确。

验证清单

检查项 方法
总行数是否正确 清洗前后行数对比
是否还有重复 再次运行”删除重复项”检查
是否还有空值 COUNTBLANK 检查关键列
数值范围是否合理 MINMAX 检查极值
分类值是否统一 用”数据验证”或透视表检查唯一值列表
日期范围是否正确 检查 MIN(日期)MAX(日期)

用数据透视表验证分类字段

对于”城市”、”渠道来源”这类分类字段,用透视表可以快速看到所有唯一值:

  1. 插入透视表
  2. 把分类字段拖到”行”区域
  3. 检查是否有异常的分类值(如错别字、空格导致的重复分类)

常用快捷键速查

操作 Windows 快捷键 Mac 快捷键
选中整个数据区域 Ctrl + Shift + End Cmd + Shift + End
跳到数据末尾 Ctrl + End Cmd + End
定位空值 Ctrl + G → 空值 Ctrl + G → 空值
查找替换 Ctrl + H Cmd + H
批量填充 选中 → 输入 → Ctrl + Enter 选中 → 输入 → Ctrl + Enter
筛选 Ctrl + Shift + L Cmd + Shift + L
删除整行 Ctrl + - Ctrl + -
插入整行 Ctrl + Shift + + Ctrl + Shift + +

实战练习:清洗一份电商用户数据

假设你拿到一份包含以下问题的用户数据:

问题 涉及字段 数据示例
姓名有多余空格 name ” 张三 “
手机号格式不一 phone “138-1234-5678” / “13812345678”
性别写法不统一 gender “男”/”M”/”male”/”1”
注册日期格式混乱 reg_date “2025-01-15” / “20250115” / “2025/1/15”
城市名不统一 city “上海”/”上海市”/”Shanghai”
年龄有异常值 age 150、-5、0
邮箱有空值 email (空)

清洗步骤

  1. 姓名=TRIM(A2) 去除空格
  2. 手机号=SUBSTITUTE(SUBSTITUTE(B2, "-", ""), " ", "") 去除连字符和空格
  3. 性别:建立映射表,用 VLOOKUP 统一为”男”/”女”/”未知”
  4. 注册日期:用 IF + DATEVALUE + DATE 函数组合统一格式
  5. 城市:查找替换 “上海市”→”上海”,”Shanghai”→”上海”
  6. 年龄:用 =IF(OR(F2<0, F2>120), "异常", F2) 标记异常值
  7. 邮箱COUNTBLANK 统计空值率,决定是否填充”未填写”

练习题

  1. 你拿到一份销售数据,发现”产品名称”列有以下写法:”iPhone 15”、”iphone 15”、”IPHONE 15”、”iPhone15”。请设计一个清洗方案把它们统一。

  2. 一列日期数据混合了 “2025-03-01”、”03/01/2025”、”2025年3月1日” 三种格式。请写出将它们统一转换为日期类型的公式。

  3. 你拿到一份 10 万行的用户数据。请设计一个完整的数据清洗流程(包括检查项和清洗步骤),确保数据可以用于后续分析。


小结

要点 说明
第一步 拿到数据先看规模、字段、样本、统计量
去重 删除重复项功能,或 COUNTIF 标记后审查
缺失值 根据业务场景选择删除、填充或保留
格式统一 TRIM、CLEAN、UPPER/LOWER、日期格式转换
数据验证 清洗后必须验证,不要假设数据已经干净

下一篇我们将学习 透视表与数据汇总——用 Excel 最强大的分析工具,快速做分组统计和交叉分析。