代码之家  ›  专栏  ›  技术社区  ›  송준석

如何使用pandas子选择与float dtype相等的行

  •  3
  • 송준석  · 技术社区  · 8 年前

    我有以下数据集示例。

    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: []
    

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

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

    1 回复  |  直到 8 年前
        1
  •  6
  •   EdChum Arthur G    8 年前

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

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

    当前发布的示例数据有效,但实际数据的精度更高。你可以调整 atol 帕拉姆 NPISISSION 设定绝对公差。

    另一个方面是,比较浮点数的相等性通常不会起作用,因为 floating point precision 所以在处理浮点值时,最好使用 NPISISSION 供比较