pandas .loc返回空数据帧

时间:2018-05-29 02:40:04

标签: python pandas

我有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)]  

- 返回值

非常感谢任何帮助。

2 个答案:

答案 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]

此过滤器用于替换具有任意大小错误的相等条件的行。