本文目录导读:
- 先问自己:你要“找重复”还是“删重复”?
- Excel 场景:最常用的三种方法
- WPS 表格场景(操作几乎与Excel相同,但有一个特色功能)
- SQL 场景:结构化查询语言中的精准去重
- Python 场景(Pandas 库,适合复杂逻辑和大数据)
- 避坑指南:筛选重复数据时最容易犯的错
- 一张表选对方法

在日常工作或数据分析中,重复数据就像“隐身刺客”——不清理影响结果,清理不当又误伤有用信息,无论是处理客户名单、库存编码还是实验记录,掌握高效的重复数据筛选方法,能避免无数加班夜,本文从最基础的Excel操作,到SQL、Python等进阶工具,覆盖五大高频场景,附带避坑指南,让你一次学会“去重”的正确姿势。
先问自己:你要“找重复”还是“删重复”?
- 找重复:定位哪些行/单元格出现了多次(如找出同一客户名下多个订单)
- 删重复:只保留第一个或最后一个,删除其余副本(如清洗导入的原始数据)
明确需求后,再选择对应方法。
Excel 场景:最常用的三种方法
方法1:条件格式 → 高亮重复值(适合快速肉眼检视)
步骤:
- 选中要检查的区域(比如A2:A100)
- 点击「开始」→「条件格式」→「突出显示单元格规则」→「重复值」
- 设置颜色,确定即可看到所有重复项被标红
优点:不修改原始数据,仅视觉提示
缺点:需手动处理,不能自动删除
方法2:数据工具 → 删除重复值(适合清洗干净的数据)
步骤:
- 选中数据区域,点击「数据」→「删除重复值」
- 在弹出的对话框中选择“全选”或指定列(如只根据“手机号”去重)
- 点击确定,Excel会提示删除了多少条重复记录
注意:该操作会直接删除重复行(保留首次出现的行),不可撤销,建议先备份数据
方法3:COUNTIF 公式(适合需要保留原始数据、边看边过滤)
- 新增辅助列,输入公式:
=COUNTIF(A:A, A2) - 下拉填充后,值大于1的单元格对应的行即为重复项
- 可利用筛选功能仅显示大于1的行,然后批量处理
WPS 表格场景(操作几乎与Excel相同,但有一个特色功能)
WPS在「数据」菜单下新增了「筛选重复项」功能:
- 选中区域 → 数据 → 筛选重复项 → 可选择“高亮显示”或“仅保留唯一值”
- 特别适合需要不破坏原表结构的情况下快速提取唯一数据
SQL 场景:结构化查询语言中的精准去重
适用于数据库、报表工具或大型数据集。
1 查找重复记录(基于某列)
SELECT email, COUNT(*) FROM users GROUP BY email HAVING COUNT(*) > 1;
这条语句会列出所有出现次数大于1的邮箱及其重复次数。
2 删除重复记录,保留ID最小的一条
DELETE FROM users
WHERE id NOT IN (
SELECT MIN(id)
FROM users
GROUP BY email
);
注意:需要保证表中有唯一主键(如id),否则删除逻辑可能出错。
3 一键去重并保留最新记录(适用于有时间戳的表)
WITH ranked AS (
SELECT *, ROW_NUMBER() OVER (PARTITION BY email ORDER BY created_at DESC) AS rn
FROM users
)
DELETE FROM users WHERE id IN (SELECT id FROM ranked WHERE rn > 1);
Python 场景(Pandas 库,适合复杂逻辑和大数据)
import pandas as pd
df = pd.read_csv('data.csv')
# 1. 查看重复行
print(df.duplicated().sum())
# 2. 基于某列查看重复项
duplicates = df[df.duplicated(subset=['phone'], keep=False)]
print(duplicates)
# 3. 删除重复,保留第一个
df_clean = df.drop_duplicates(subset=['phone'], keep='first')
# 4. 保留最后一个
df_clean = df.drop_duplicates(subset=['phone'], keep='last')
# 5. 标记重复行(新增一列“is_duplicate”)
df['is_duplicate'] = df.duplicated(subset=['email'], keep=False)
进阶案例:若需根据多个列判断重复,如“同一姓名+同一部门”视为重复,则 subset=['name', 'dept']。
避坑指南:筛选重复数据时最容易犯的错
| 常见错误 | 正确做法 |
|---|---|
| 盲目删除整行重复数据 | 先确定重复的判断依据(哪几列),避免误删真正有价值的信息 |
| 忽略大小写/空格差异 | 使用 =TRIM() 或 strip() 清理前后空格;用 UPPER() 统一大小写 |
| 只凭视觉判断 | 使用公式或条件格式量化统计,人眼易遗漏 |
| 忘记备份原始数据 | 无论用哪种工具,先另存副本或原地加“备份”列 |
| 认为“去重就能解决所有数据问题” | 先分析原因:是录入错误、系统bug,还是业务允许重复(如同一用户多次下单) |
一张表选对方法
| 数据规模 | 工具推荐 | 关键操作 |
|---|---|---|
| 几千行以内,临时处理 | Excel / WPS | 条件格式 → 手动处理 或 删除重复值 |
| 几万行,需要复现 | Python Pandas | .drop_duplicates(subset=[]) |
| 数十万行,数据库操作 | SQL | GROUP BY ... HAVING COUNT(*)>1 + DELETE |
| 实时数据,需长期监测 | 数据清洗脚本 + 定时任务 | 结合 Python + 日志记录 |
掌握这些技巧后,你会发现自己再也不会被“重复数据”拦住半小时。记住核心原则:先理解数据业务含义,再动手去重。 希望这篇指南对你有所帮助。