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
相关产品推荐
相关产品推荐

