You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas执行去重操作后仍存在重复float值的问题排查

Pandas浮点数列去重后仍有重复值的解决办法

核心问题出在浮点数的精度误差:大部分十进制小数无法被二进制浮点数精确表示,比如0.1在二进制中是无限循环的,存储时会被截断,导致看起来完全相同的数值,实际底层存储的精确值存在细微差异——而Pandas的drop_duplicates()是严格按精确值判断是否重复的。

验证精度差异

先确认是不是精度问题:把列值转换成高精度字符串,查看真实存储值:

df['your_float_col'].apply(lambda x: format(x, '.20f'))

如果输出的字符串末尾有不同的数字,那就实锤是精度误差导致的。

解决方法

  1. 四舍五入到指定小数位
    这是最常用的方法,根据你的业务需求把数值统一到固定小数位,再去重:

    # 保留6位小数,可根据实际调整
    df['your_float_col'] = df['your_float_col'].round(6)
    df = df.drop_duplicates(subset=['your_float_col'])
    
  2. 用近似相等判断去重
    如果不想丢失精度,用numpy.isclose()来判断数值是否近似相等,手动筛选唯一行:

    import numpy as np
    
    keep_indices = [0]
    for idx in range(1, len(df)):
        current_val = df['your_float_col'].iloc[idx]
        # 和已保留的所有值对比,都不近似相等才保留
        if not any(np.isclose(current_val, df['your_float_col'].iloc[keep_indices])):
            keep_indices.append(idx)
    df_unique = df.iloc[keep_indices]
    
  3. 用Decimal类型处理精确小数
    导入decimal模块,把浮点数列转换成精确的Decimal类型后再去重:

    from decimal import Decimal
    
    df['your_float_col'] = df['your_float_col'].apply(Decimal)
    df = df.drop_duplicates(subset=['your_float_col'])
    

额外提醒

如果这些浮点数是从CSV/Excel等文件读取的,检查读取时是否有格式解析问题;如果是字符串转换来的,确认原始字符串没有隐藏字符或格式错误。

内容的提问来源于stack exchange,提问作者Mateusz Szymczak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:40:04