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

Python中为何无法像筛选整数那样筛选浮点数列?

浮点数筛选返回空DataFrame的原因及解决办法

直接用==筛选浮点数返回空结果,本质是浮点数的精度存储问题:计算机无法精确表示所有十进制浮点数,你看到的35.0454545455只是显示值,实际存储的是一个近似值(比如35.045454545499996或35.045454545500002),直接用相等判断自然匹配不到。

以下是几种可行的解决方法:

  • 使用numpy的isclose()函数,通过设置容忍度匹配近似相等的浮点数:

    import numpy as np
    df[np.isclose(df['nums'], 35.0454545455)].head()
    

    可通过rtol(相对公差)和atol(绝对公差)参数调整匹配精度,默认参数已能覆盖大多数场景。

  • 对数据列进行四舍五入,匹配固定小数位数后的数值:

    df[df['nums'].round(10) == 35.0454545455].head()
    

    这里保留10位小数,和目标值的小数位数一致,消除存储精度带来的差异。

  • 直接提取数据中实际存储的目标值进行匹配:
    先定位到该值所在的行,提取其精确存储值再筛选:

    # 假设目标值在第n行,替换成实际索引
    target_val = df['nums'].iloc[n]
    df[df['nums'] == target_val].head()
    

内容的提问来源于stack exchange,提问作者Ifeoluwa Kunle-John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:40:29