×

如何筛选重复数据

如何筛选重复数据,如何筛选重复数据,从Excel到SQL,一篇搞定所有场景的实用指南

okx okx 发表于2026-05-11 05:31:25 浏览3 评论0

抢沙发发表评论

本文目录导读:

  1. 先问自己:你要“找重复”还是“删重复”?
  2. Excel 场景:最常用的三种方法
  3. WPS 表格场景(操作几乎与Excel相同,但有一个特色功能)
  4. SQL 场景:结构化查询语言中的精准去重
  5. Python 场景(Pandas 库,适合复杂逻辑和大数据)
  6. 避坑指南:筛选重复数据时最容易犯的错
  7. 一张表选对方法
如何筛选重复数据,如何筛选重复数据,从Excel到SQL,一篇搞定所有场景的实用指南

在日常工作或数据分析中,重复数据就像“隐身刺客”——不清理影响结果,清理不当又误伤有用信息,无论是处理客户名单、库存编码还是实验记录,掌握高效的重复数据筛选方法,能避免无数加班夜,本文从最基础的Excel操作,到SQL、Python等进阶工具,覆盖五大高频场景,附带避坑指南,让你一次学会“去重”的正确姿势。


先问自己:你要“找重复”还是“删重复”?

  • 找重复:定位哪些行/单元格出现了多次(如找出同一客户名下多个订单)
  • 删重复:只保留第一个或最后一个,删除其余副本(如清洗导入的原始数据)

明确需求后,再选择对应方法。


Excel 场景:最常用的三种方法

方法1:条件格式 → 高亮重复值(适合快速肉眼检视)

步骤

  1. 选中要检查的区域(比如A2:A100)
  2. 点击「开始」→「条件格式」→「突出显示单元格规则」→「重复值」
  3. 设置颜色,确定即可看到所有重复项被标红

优点:不修改原始数据,仅视觉提示
缺点:需手动处理,不能自动删除

方法2:数据工具 → 删除重复值(适合清洗干净的数据)

步骤

  1. 选中数据区域,点击「数据」→「删除重复值」
  2. 在弹出的对话框中选择“全选”或指定列(如只根据“手机号”去重)
  3. 点击确定,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 + 日志记录

掌握这些技巧后,你会发现自己再也不会被“重复数据”拦住半小时。记住核心原则:先理解数据业务含义,再动手去重。 希望这篇指南对你有所帮助。