pandas 重复数据处理
pandas 重复数据处理
重复数据不能简单理解为整行完全一样。有时订单号重复才是问题,有时同一个用户多条记录是正常行为。
处理重复值前,必须先定义什么叫重复,以及重复后应该保留哪一条。
先确认重复规则
如果业务主键是 order_id,就按订单号判断;如果分析的是用户画像,可能要按 user_id 保留最新一条;如果是日志数据,时间戳不同的多条记录可能都要保留。
key = ["order_id"]dup = df[df.duplicated(subset=key, keep=False)].sort_values(key)print(dup.head(20))选择保留策略
keep="first" 保留第一次出现,keep="last" 保留最后一次出现,keep=False 可以把所有重复记录都标出来。
如果要保留最新记录,先按时间排序,再删除重复。
df = df.sort_values("updated_at")clean = df.drop_duplicates(subset=["order_id"], keep="last")删除前后都要对账
删除重复数据前先统计数量,删除后确认行数变化符合预期。不要在没有备份的原表上直接覆盖。
before = len(df)clean = df.drop_duplicates(subset=["order_id"], keep="last")print("removed", before - len(clean))print(clean["order_id"].duplicated().sum())常见误区
-
不指定
subset,导致本该按主键去重的任务变成整行去重。 -
没有排序就使用
keep="last",保留的并不一定是最新记录。 -
把正常的多次购买、多次登录误删成一条。
实战复盘
把《pandas 重复数据处理》放到真实数据分析里,我会先准备一份最小样例和一份异常样例。最小样例验证代码路径是否通,异常样例验证缺失值、重复值、类型错误或边界值是否被发现。
pandas 文章最重要的证据不是代码能运行,而是运行后打印出来的 shape、dtypes、缺失率、前几行样本和关键统计是否符合预期。这些输出应该保留在分析记录里。
如果这一步会影响后续报表或模型,我会把清洗前后的行数、字段数量和异常记录数量写清楚。这样以后结果变化时,能追溯到底是哪一步改变了数据。
最小验收样例
验收《pandas 重复数据处理》时,我会手写一个三到五行的小 DataFrame:一行正常数据,一行缺失或异常数据,一行边界数据。先让示例在小表上跑通,再换成完整数据集。
小表的好处是结果可以人工计算。只要人工结果和 pandas 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。
小结
去重不是一个函数调用,而是一次业务判断。先定义重复,再选择保留策略,最后用数量变化验证结果。
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!













