Pandas drop_duplicates方法未按预期生效问题求助
解决pandas的drop_duplicates未删除重复行的问题
你遇到的情况是调用df.drop_duplicates(inplace=True)后,肉眼可见的重复行没被删除,核心原因大概率是浮点数精度差异——看起来数值完全相同的列,实际存储的二进制值有微小差别,导致pandas判定它们不是重复行。
验证问题
先确认这两行是否真的被pandas识别为重复:
# 查看所有被标记为重复的行 print(df[df.duplicated(keep=False)])
如果输出里没有那两行2023-05-01的数据,说明浮点数精度是问题根源。
解决办法
方法1:统一数值列的小数位数
对所有浮点数列进行四舍五入,消除微小精度差异:
# 选择所有浮点类型的列 float_cols = df.select_dtypes(include=['float64', 'float32']).columns # 保留6位小数(可根据你的数据调整位数) df[float_cols] = df[float_cols].round(6) # 再次删除重复行 df.drop_duplicates(inplace=True)
方法2:手动指定重复判定的精度阈值
用numpy的isclose自定义重复判定逻辑:
import numpy as np # 生成布尔掩码,标记与上一行完全接近的重复行 mask = np.all(np.isclose(df.to_numpy(), df.shift().to_numpy()), axis=1) # 过滤掉重复行(保留第一行) df = df[~mask]
方法3:规避inplace的潜在问题
有时候inplace参数可能因数据视图/副本的问题不生效,直接重新赋值更稳妥:
df = df.drop_duplicates()
内容的提问来源于stack exchange,提问作者Aditya Borde
相关产品推荐
相关产品推荐

