这份指南围绕高效筛选重复次数相同的重复数据展开,提供Excel、Python、SQL三类工具的实用操作 :Excel可通过COUNTIF函数统计每条数据的重复次数,再利用筛选功能锁定次数一致的内容;Python借助pandas库,以groupby分组后统计计数,筛选出计数相同的数据集;SQL则通过GROUP BY分组结合COUNT()函数统计重复数,搭配HAVING子句精准筛选重复次数相等的记录,助力用户根据场景快速完成目标筛选。
在数据处理的日常工作中,重复数据是常见的“顽疾”——它不仅会占用存储空间、降低分析效率,还可能导致统计结果失真、决策判断偏差,无论是整理报表的职场人,还是处理数据集的分析师,掌握筛选重复数据的 都至关重要,本文将从大众常用的Excel,到专业的Python、SQL,一步步教你精准识别、处理重复数据。
Excel:轻量数据的快速筛选方案
对于千条以内的小量数据,Excel凭借直观的可视化操作,是入门用户的首选。
条件格式:直观高亮重复项
想快速定位重复数据的位置,条件格式是最直观的方式:
- 步骤:选中需要排查的数据区域→点击「开始」选项卡→「条件格式」→「突出显示单元格规则」→「重复值」→选择高亮格式(如浅红填充色)→确认。
- 优势:无需修改原数据,一眼就能看到重复数据的分布,适合初步排查。
删除重复项:一键清理重复数据
如果需要直接去除重复行,Excel的“删除重复项”功能可以一键完成:
- 步骤:选中数据区域→点击「数据」选项卡→「删除重复项」→勾选需要判断重复的列(如手机号、订单号)→确认。
- 注意:该操作会直接删除原数据中的重复行,建议先备份原始数据再操作。
高级筛选:灵活提取唯一值或重复值
想要保留原数据,同时单独提取唯一值或重复值,高级筛选更灵活:
- 步骤:点击「数据」选项卡→「高级」→选择「将筛选结果复制到其他位置」→列表区域选中原始数据→条件区域留空→勾选「选择不重复的记录」→选择结果存放位置→确认。
- 拓展:若要提取重复值,可以先通过条件格式标记重复项,再筛选标记结果复制。
函数公式:自定义判断重复项
如果需要自定义重复判断规则(如仅根据某一列判断),用函数公式更精准:
- 标记重复行:在空白列输入
=IF(COUNTIF($A$1:$A$100,A1)>1,"重复","唯一")(A列为判断列,100为数据行数),按回车后下拉填充,即可批量标记重复状态。 - 统计重复次数:输入
=COUNTIF($A$1:$A$100,A1),可直接显示每行数据的重复次数。
Python:大数据量的高效处理工具
当数据量达到几万甚至几十万条时,Excel会出现卡顿,这时Python的pandas库是处理重复数据的更优选择,不仅效率高,还支持自动化批量操作。
识别重复数据
先导入pandas库并读取数据,再通过duplicated() 定位重复行:
import pandas as pd
# 读取Excel或CSV数据
df = pd.read_excel('data.xlsx')
# 查找整行重复的记录
duplicate_rows = df[df.duplicated()]
print("整行重复的数据:\n", duplicate_rows)
# 指定列判断重复(如根据“手机号”列)
duplicate_by_col = df[df.duplicated(subset=['手机号'])]
print("手机号重复的数据:\n", duplicate_by_col)
删除重复数据
用drop_duplicates() 可以灵活清理重复数据,支持保留首次、末次或删除所有重复项:
# 保留之一次出现的重复行,删除后续重复
df_clean_first = df.drop_duplicates(keep='first')
# 保留最后一次出现的重复行
df_clean_last = df.drop_duplicates(keep='last')
# 删除所有重复行(仅保留唯一出现的记录)
df_clean_unique = df.drop_duplicates(keep=False)
# 将清理后的数据保存为新文件
df_clean_first.to_excel('clean_data.xlsx', index=False)
SQL:数据库中批量排查重复数据
如果数据存储在MySQL、SQL Server等数据库中,直接用SQL语句即可批量筛选和处理,无需导出数据。
查找重复记录
以用户表为例,查找手机号重复的记录及重复次数:
-- 统计每个手机号的重复次数
SELECT 手机号, COUNT(*) AS 重复次数
FROM 用户表
GROUP BY 手机号
HAVING COUNT(*) > 1;
-- 查看所有重复的完整记录
SELECT *
FROM 用户表
WHERE 手机号 IN (
SELECT 手机号
FROM 用户表
GROUP BY 手机号
HAVING COUNT(*) > 1
)
ORDER BY 手机号;
删除重复数据(保留最新一条)
如果需要删除重复行,同时保留最新创建的记录,可以通过自连接实现:
DELETE t1 FROM 用户表 t1 JOIN 用户表 t2 ON t1.手机号 = t2.手机号 AND t1.创建时间 < t2.创建时间;
进阶技巧:处理“非完全相同”的重复数据
实际工作中,很多重复数据并非完全匹配,比如名字带空格、拼写近似(如“张三”和“张三 ”“王晓明”和“王晓鸣”),这时需要先预处理再判断。
清理格式重复
- Excel:用
TRIM()函数去除空格(=TRIM(A1)),或SUBSTITUTE()替换特殊字符(=SUBSTITUTE(A1," ",""))。 - Python:用字符串 批量处理:
# 去除姓名列的空格 df['姓名'] = df['姓名'].str.strip().str.replace(' ', '')
识别模糊重复
对于拼写近似的重复,可以用Python的fuzzywuzzy库计算字符串相似度:
from fuzzywuzzy import fuzz
# 计算两个字符串的相似度(0-100,值越高越相似)
similarity = fuzz.ratio('王晓明', '王晓鸣')
if similarity > 80:
print("疑似重复数据")
根据场景选择更优方案
- 少量数据(千条以内):优先用Excel,操作简单易上手;
- 中大型数据集:用Python pandas,高效且支持自动化批量处理;
- 数据库存储的数据:直接用SQL语句批量排查,无需导出数据;
- 模糊重复数据:结合预处理和相似度算法,精准识别。
最后提醒:无论用哪种 ,处理前一定要备份原始数据,避免误操作导致数据丢失!


还没有评论,来说两句吧...