影刀RPA 数据去重实战:找出Excel中的重复记录

影刀RPA 数据去重实战:找出Excel中的重复记录
title: “影刀RPA 数据去重实战找出Excel中的重复记录”date: 2026-07-01author: 林焱影刀RPA 数据去重实战找出Excel中的重复记录从多个系统导出的数据同一条记录可能出现多次。手动查重靠肉眼或COUNTIF公式数据一大效率极低。用影刀Pandas几十万条数据几秒内完成去重还能告诉你哪里有重复。什么情况用什么必须做去重的场景多系统导出的数据合并后同一客户/订单出现多次Excel操作失误行数据被复制粘贴导致重复爬虫采集了多次重复URL/商品数据堆积CRM里同一联系人创建了多个账号手机号相同但名字写法不同不需要去重的场景数据本身就允许重复如每天的日志记录只有一条数据怎么做拼多多店群自动化报活动上架方法1完全相同的行去重最简单【影刀操作】添加【读取Excel】指令文件路径C:\数据\原始数据.xlsx保存结果变量用于Python处理添加【Python】指令importpandasaspd dfpd.read_excel(rC:\数据\原始数据.xlsx)original_countlen(df)print(f原始数据{original_count}行)# 完全重复的行去掉所有列都相同才算重复df_dedupdf.drop_duplicates()removed_countoriginal_count-len(df_dedup)print(f删除重复行{removed_count}行)print(f去重后{len(df_dedup)}行)# 保存去重结果df_dedup.to_excel(rC:\数据\去重后数据.xlsx,indexFalse)yda.set_variable(removed_count,removed_count)方法2按关键字段去重更常用实际业务中重复通常是指某个关键字段相同比如订单号相同就算重复。【影刀操作】添加【Python】指令importpandasaspd dfpd.read_excel(rC:\数据\订单数据.xlsx)# 按订单号去重保留最新的那条假设按日期排序df_sorteddf.sort_values(下单时间,ascendingFalse)df_dedupdf_sorted.drop_duplicates(subset[订单号],# 只按订单号判断重复keepfirst# 保留第一条排序后的最新一条)df_dedupdf_dedup.sort_values(下单时间)# 恢复时间顺序# 找出被删除的重复记录duplicate_maskdf_sorted.duplicated(subset[订单号],keepfirst)duplicate_recordsdf_sorted[duplicate_mask]print(f重复订单数{len(duplicate_records)})print(f涉及订单号{duplicate_records[订单号].unique().tolist()[:10]})# 保存去重结果df_dedup.to_excel(rC:\数据\去重订单.xlsx,indexFalse)# 保存重复记录供人工审查iflen(duplicate_records)0:duplicate_records.to_excel(rC:\数据\重复记录审查.xlsx,indexFalse)print(f重复记录已保存请人工检查C:\\数据\\重复记录审查.xlsx)方法3模糊去重相似但不完全相同客户名写法不一致“张三和张 三”、“北京科技有限公司和北京科技(有限公司)”——这种需要模糊匹配。【影刀操作】添加【Python】指令importpandasaspdfromfuzzywuzzyimportfuzz,processimportre dfpd.read_excel(rC:\数据\客户数据.xlsx)defnormalize_company_name(name):标准化公司名称ifnotisinstance(name,str):return# 去除空格、括号变体、常见后缀namename.strip()namere.sub(r[\s\(\)·•],,name)namename.replace(,).replace(,)namere.sub(r(有限责任公司|有限公司|股份有限公司|公司)$,,name)returnname df[标准化名称]df[公司名称].apply(normalize_company_name)# 找出相似度85的公司名companiesdf[标准化名称].unique().tolist()similar_pairs[]fori,companyinenumerate(companies):ifnotcompany:continuematchesprocess.extract(company,companies[i1:],limit3,scorerfuzz.ratio)formatch_name,scoreinmatches:ifscore85andcompany!match_name:similar_pairs.append({公司A:company,公司B:match_name,相似度:score})ifsimilar_pairs:similar_dfpd.DataFrame(similar_pairs)similar_df.sort_values(相似度,ascendingFalse,inplaceTrue)similar_df.to_excel(rC:\数据\疑似重复公司.xlsx,indexFalse)print(f发现{len(similar_pairs)}对疑似重复公司请人工确认)else:print(未发现疑似重复的公司名)方法4多条件组合去重联系人去重姓名手机号都相同才算重复或者任意一个相同也算。【影刀操作】importpandasaspd dfpd.read_excel(rC:\数据\联系人.xlsx)# 规则1姓名手机号都相同 → 明确重复rule1_dupdf[df.duplicated(subset[姓名,手机号],keepFalse)]# 规则2手机号相同但姓名不同 → 疑似重复可能同一人名字录入不同phone_dupdf[df.duplicated(subset[手机号],keepFalse)]name_diff_phone_samephone_dup[phone_dup.duplicated(subset[手机号],keepFalse)~phone_dup.duplicated(subset[姓名,手机号],keepFalse)]print(f明确重复姓名手机均同{len(rule1_dup)}条)print(f疑似重复手机相同名字不同{len(name_diff_phone_same)}条)# 自动删除明确重复保留疑似重复供人工审查df_cleandf.drop_duplicates(subset[姓名,手机号],keepfirst)df_clean.to_excel(rC:\数据\联系人_去重.xlsx,indexFalse)name_diff_phone_same.to_excel(rC:\数据\疑似重复_待确认.xlsx,indexFalse)有什么坑坑1保留哪条的标准不统一同一订单有两条记录一条金额是1000元一条是1001元保留哪条解决方法先确认业务规则保留最新的保留金额大的保留数据完整的在drop_duplicates的sort_values里体现。TEMU店群矩阵自动化运营核价报活动坑2去重后行数对不上去重前1000行去重后只有500行疑似误删。解决方法永远先保存重复记录到单独文件便于核查不要只输出去重后的数据。坑3模糊去重误判北京联通和北京移动相似度可能85但完全是两家公司。解决方法模糊去重只输出疑似重复清单不自动删除必须人工确认后再清理。坑4NaN值当作相同处理有些字段是空值NaN多条NaN会被判断为重复行被删除。解决方法去重前先处理空值或者在drop_duplicates前过滤掉关键字段为空的行。总结数据去重的关键是定义什么叫重复。完全相同最简单直接处理按关键字段去重要考虑保留哪条模糊匹配要人工确认。无论如何都要保留重复记录的备份万一删错了还能找回来。