在 pandas 中按浮点列中的值选择行

ger*_*erm 5 python pandas

我将 csv 数据文件导入到df带有.pandas DataFrame 的 pandas DataFrame 中pd.read_csv。该文本文件包含一列,其中包含如下字符串:

y
0.001
0.0003
0.0001
3e-05
1e-05
1e-06
Run Code Online (Sandbox Code Playgroud)

如果我打印 DataFrame,pandas 会输出这些值的十进制表示形式,逗号后有 6 位数字,一切看起来都很好。

当我尝试按值选择行时,如下所示

df[df['y'] == value],
Run Code Online (Sandbox Code Playgroud)

通过输入值的相应十进制表示形式,pandas 可以正确匹配某些值(例如:第 0、2、4 行),但不会匹配其他值(第 1、3、5 行)。这当然是因为这些行值在基数 2 中没有完美的表示。

我能够通过以下方式解决这个问题:

df[abs(df['y']/value-1) <= 0.0001]
Run Code Online (Sandbox Code Playgroud)

但似乎有些尴尬。我想知道的是: numpy 已经有一个方法.isclose,专门用于此目的。

.isclose像这样的情况有没有办法使用呢?或者 pandas 中有更直接的解决方案?

Mik*_*ham 6

是的,你可以使用 numpy 的isclose

df[np.isclose(df['y'], value)]
Run Code Online (Sandbox Code Playgroud)