python - 如何使用 Pandas 子选择与 float dtype 相等的行

标签 python pandas dataframe floating-point

我有以下数据集示例。

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

我检索整数时得到结果,但我无法检索像上面数据集的时间列这样的 float 据。

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

最佳答案

这里的问题是您的实际浮点值比显示值具有更高的精度,您可以使用 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 以设置绝对公差。

另一个方面是,比较浮点值是否相等通常会因为 floating point precision 而无法正常工作。所以在处理浮点值时,最好使用类似 np.isclose 的东西进行比较

关于python - 如何使用 Pandas 子选择与 float dtype 相等的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50738946/

相关文章:

python - 更改 tkinter 文本框小部件中每隔一行文本的背景颜色

python - 二进制列的 Pandas 值列表

python - 添加 pandas 中所有缺失的日期

r - 计算以零为底的累积总和 (cumsum)

python - 按 ID 分组,返回 MIN 日期并在 MIN 日期的时间包括邮政编码

python - 我可以学习的很棒的 flask /其他 python 微框架代码

python - 如何在 Pandas 中选择缺失数据超过一定数量的行/列?

python - Pandas DataFrame Groupby 和改革

python - 通过 cython 将 python 字符串传递给 C

python-3.x - Matplotlib:仅将单元格颜色应用于某些列/单元格