我有pandas数据框,如下所示。
chainage(km)
0
0.001
0.002
0.003
0.004
当我使用.loc
搜索chainage(km)
时,它会返回某些链的空数据框。
print data.loc[data['chainage(km)'] == float(0.004)]
- 空数据框
print data.loc[data['chainage(km)'] == float(0.001)]
- 返回值
非常感谢任何帮助。
答案 0 :(得分:3)
由于浮点不准确而产生问题。这在Is floating point math broken?中解释。
在这种情况下,请改用np.isclose
。
df[np.isclose(data['chainage(km)'], 0.004)]
答案 1 :(得分:0)
两个可能的原因:
列chainage(km)
可能是对象类型,对于第五行,它将0.004
存储为字符串,即'0.004'
。要修复它,将其转换为float
data = data.astype(float)
如果在完成上述演员后,过滤仍然不适用于0.004
然后,假设data['chainage(km)'] == float(0.004)
没有返回任何True
,而data.loc[data['chainage(km)'] == float(0.001)]
正确返回,则表明您遇到了浮点错误。
尝试以下方法:
x = float(0.004)
data[abs(data['chainage(km)'] - float(x)) < 0.0001*x]
此过滤器用于替换具有任意大小错误的相等条件的行。