Pandas isin()函数无法正确识别数字匹配项

isin()给我奇怪的结果。我创建以下数据框:

import pandas as pd
import numpy as np

test=pd.DataFrame({'1':np.linspace(0.0,1.0,11)})

>>> test['1']
0     0.0
1     0.1
2     0.2
3     0.3
4     0.4
5     0.5
6     0.6
7     0.7
8     0.8
9     0.9
10    1.0
Name: 1, dtype: float64

现在(显然)使用相同的数组isin()给了我一些奇怪的东西。

>>> test['1'].isin([0. , 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1. ])
0      True
1      True
2      True
3     False
4      True
5      True
6     False
7     False
8      True
9      True
10     True
Name: 1, dtype: bool

我怀疑某些数字问题或与数据类型有关的问题。有人可以解释一下并告诉我如何预防吗?

非常感谢!

评论
  • 泪眸人
    泪眸人 回复

    isin compares the exact values, so using it on float values is almost never a good idea. There might be floating point error that is not visible. For example,

    for x in np.linspace(0.0,1.0,11): print(x)
    

    给你:

    0.0
    0.1
    0.2
    0.30000000000000004
    0.4
    0.5
    0.6000000000000001
    0.7000000000000001
    0.8
    0.9
    1.0
    

    That says 0.3 you see in test is not really 0.3.