首页 > 解决方案 > 如何使用 pandas 子选择与 float dtype 相等的行

问题描述

我有以下数据集示例。

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
              ......

我使用下面的代码尝试了索引。

df_csv_y[df_csv_y.time== 736527.482639]

我对数据集中存在的值进行了索引,但结果如下。

Empty DataFrame
Columns: [time, value]
Index: []

当我检索一个整数时,我得到了结果,但我无法像上面数据集的时间列那样检索浮点数据。

我想知道如何解决这个问题。

标签: pythonpandasdataframefloating-point

解决方案


这里的问题是您的实际浮点值比显示的值具有更高的精度,您可以使用np.isclose并将容差设置为比默认值更高的精度以选择足够接近的值:

In[165]:
df[np.isclose(df['time'],736527.482639, 0.0000000001)]

Out[165]: 
            time     value
1  736527.482639  27.10001

您当前发布的示例数据有效,但您的真实数据具有更高的精度。您可以调整atol参数以np.isclose设置绝对容差。

另一个方面是,比较浮点值是否相等通常由于浮点精度而往往不起作用,因此在处理浮点值时最好使用类似的东西np.isclose进行比较


推荐阅读