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

Pandas DataFrame调高下限阈值后返回空结果?明明有符合条件的数据

Pandas筛选Age列异常问题排查与解决

这不是预期行为,核心问题出在浮点数精度误差上,以下是具体分析和解决方法:

  • 问题根源
    你的Age列大概率是浮点数类型,像4.12e6、5.1e6这类科学计数法表示的数值,在计算机存储时会存在微小精度偏差。比如4.12e6实际存储值可能是4119999.999999999,当用ALL['age'] < 3600000判断时,这些看似符合条件的数值会被误判为小于360万,最终被全部剔除,导致结果为空。

  • 验证方法
    可以先确认列类型和数值的精确存储状态:

    # 查看Age列的数据类型
    print(ALL['age'].dtype)
    # 查看前几个数值的精确表示
    print(ALL['age'].head().apply(lambda x: format(x, '.20f')))
    
  • 解决方案

    1. 转换为整数类型(若Age是整数含义的数值):
      # 处理空值后转整数
      ALL['age'] = ALL['age'].fillna(0).astype(int)
      # 直接筛选目标区间
      e1 = ALL[(ALL['age'] >= 3600000) & (ALL['age'] < 6000000)]
      
    2. 引入容差的浮点数比较:
      lower = 3600000
      upper = 6000000
      # 允许微小精度误差
      e1 = ALL[(ALL['age'] >= lower - 1e-6) & (ALL['age'] < upper + 1e-6)]
      
    3. 改用更直观的正向筛选(替代drop的反向逻辑):
      # 直接保留符合区间的行,避免反向判断出错
      e1 = ALL[(ALL['age'] >= 3600000) & (ALL['age'] < 6000000)]
      

内容的提问来源于stack exchange,提问作者E F

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 06:42:06