DataFrame获取特定值行索引失败,仅匹配0值正常
解决DataFrame浮点数匹配返回空列表的问题
这是浮点数精度误差导致的问题:计算机存储浮点数时会产生微小舍入偏差,你在DataFrame中看到的0.000376,实际存储的可能是类似0.0003760000000001或0.0003759999999999的数值,直接用==做精确匹配自然会失败;而0是整数,存储无精度误差,所以匹配能成功。
给你几个可行的解决方案:
使用pandas内置的
isclose()函数做近似匹配,可自定义容差:df.index[df[0].isclose(0.000376)].tolist()若需要更严格的精度控制,可调整
rtol(相对容差)和atol(绝对容差)参数:df.index[df[0].isclose(0.000376, rtol=1e-9, atol=1e-12)].tolist()对列数据做四舍五入处理,保留与目标值一致的小数位数后再匹配:
df.index[round(df[0], 6) == 0.000376].tolist()查看数值的精确存储值,确认误差范围:
# 输出接近0.000376的数值的精确表示 print(df[df[0].between(0.000375, 0.000377)][0].apply(repr))
内容的提问来源于stack exchange,提问作者Lorenz
相关产品推荐
相关产品推荐

