송준석*_*송준석 3 python floating-point dataframe pandas
我有以下数据集示例。
df_csv_y = pd.read_csv('y_factors.csv')
time value
0 736527.481944 27.20001
1 736527.482639 27.10001
2 736527.483333 27.10001
3 736527.484028 27.10001
4 736527.484722 27.10001
......
Run Code Online (Sandbox Code Playgroud)
我使用下面的代码尝试了索引。
df_csv_y[df_csv_y.time== 736527.482639]
Run Code Online (Sandbox Code Playgroud)
我索引了数据集中存在的值,但结果如下。
Empty DataFrame
Columns: [time, value]
Index: []
Run Code Online (Sandbox Code Playgroud)
检索整数时会得到结果,但无法检索上述数据集的time列之类的float数据。
我想知道如何解决这个问题。
这里的问题是您的实际浮点值的精度高于显示的值,可以使用np.isclose
公差并将公差设置为比默认值更高的精度,以选择足够接近的值:
In[165]:
df[np.isclose(df['time'],736527.482639, 0.0000000001)]
Out[165]:
time value
1 736527.482639 27.10001
Run Code Online (Sandbox Code Playgroud)
您当前发布的样本数据有效,但实际数据具有更高的精度。您可以将atol
参数调整np.isclose
为设置绝对公差。
另一个方面是,由于浮点精度的原因,比较浮点值是否相等通常趋向于不起作用,因此在处理浮点值时,最好使用类似的东西np.isclose
进行比较