pandas 重复数据处理

710 字
4 分钟
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 输出对不上,就说明代码逻辑或字段口径还没想清楚。这个过程比直接在大表上调试更可靠。

小结#

去重不是一个函数调用,而是一次业务判断。先定义重复,再选择保留策略,最后用数量变化验证结果。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

pandas 重复数据处理
https://blog.tjcheng.cn/posts/backfill/2026-05-14/pandas-duplicate-cleaning/
作者
TengJinCheng
发布于
2026-05-14
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
TengJinCheng
Hello, I'm Teng.
公告
欢迎来到TengJinCheng工作铺!
音乐
封面

音乐

暂未播放

0:000:00
暂无歌词
分类
标签
站点统计
文章
157
分类
7
标签
114
总字数
109,939
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Local
博客版本
Firefly v6.13.4
文章许可
CC BY-NC-SA 4.0

文章目录