Pandas的isin()函数不能正确识别数字匹配。

isin() 给我带来了奇怪的结果。我创建了以下DataFrame。

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 比较精确的值,所以在浮点数上使用它几乎不是一个好主意。可能会出现看不到的浮点错误。比如说

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

这说明 0.3 你看 test 并非 0.3.

给TA打赏
共{{data.count}}人
人已打赏
未分类

当动态发送数据到绘图中移动一个散点后,FuncAnimation没有响应。

2022-9-9 8:26:20

未分类

在asp.NET MVC中存储API访问密钥的最佳实践。

2022-9-9 8:37:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索