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')))解决方案
- 转换为整数类型(若Age是整数含义的数值):
# 处理空值后转整数 ALL['age'] = ALL['age'].fillna(0).astype(int) # 直接筛选目标区间 e1 = ALL[(ALL['age'] >= 3600000) & (ALL['age'] < 6000000)] - 引入容差的浮点数比较:
lower = 3600000 upper = 6000000 # 允许微小精度误差 e1 = ALL[(ALL['age'] >= lower - 1e-6) & (ALL['age'] < upper + 1e-6)] - 改用更直观的正向筛选(替代drop的反向逻辑):
# 直接保留符合区间的行,避免反向判断出错 e1 = ALL[(ALL['age'] >= 3600000) & (ALL['age'] < 6000000)]
- 转换为整数类型(若Age是整数含义的数值):
内容的提问来源于stack exchange,提问作者E F
相关产品推荐
相关产品推荐

