Python 熊猫数据帧浮点比较问题
我有一个类似这样的数据集,其中第三列是通过将第一列除以第二列得到的:Python 熊猫数据帧浮点比较问题,python,pandas,Python,Pandas,我有一个类似这样的数据集,其中第三列是通过将第一列除以第二列得到的: A_CLOSE_PRICE B_CLOSE_PRICE A_CLOSE_PRICE/B_CLOSE_PRICE 0 113.55 0.00 inf 1 97.85 80.00 1.223125 2 60.00
A_CLOSE_PRICE B_CLOSE_PRICE A_CLOSE_PRICE/B_CLOSE_PRICE
0 113.55 0.00 inf
1 97.85 80.00 1.223125
2 60.00 70.00 0.857143
3 51.65 51.65 1.000000
4 53.50 NaN NaN
5 NaN 1649.60 NaN
6 40.00 40.50 0.987654
7 1.10 1.00 1.100000
由于我想显示差异超过10%的行,我运行以下命令:
(df['A_CLOSE_PRICE/B_CLOSE_PRICE'] - 1 ).abs() > 0.1
但下面显示的最后一行返回“True”而不是“False”,这在我看来就像一个浮点问题。有没有人知道应该如何正确处理,这样我才能得到正确的结果
0 True
1 True
2 True
3 False
4 False
5 False
6 False
7 True
是的,您有一个浮点问题,我想您可以使用
df.pct\u change
内置的axis=1和np.isclose
来处理浮点比较
s = df[['B_CLOSE_PRICE','A_CLOSE_PRICE']].pct_change(axis=1).iloc[:,-1].abs()
s.gt(0.1) & ~np.isclose(s-0.1,0)
1.100000-1
是0.100000000000009
而不是0.1
运行此命令会使用B_CLOSE_PRICE/A_CLOSE_PRICE与A_CLOSE_PRICE/B_CLOSE_PRICE产生百分比差异,这解释了不同的结果。当我运行“df['A_CLOSE_PRICE','B_CLOSE_PRICE']].pct_change(periods=-1,axis=1)。iloc[:,0]。abs()>0.1”@louisxie ah是的,对不起,您现在可以检查了,我根据一个处理浮点比较的现有解决方案更新了答案,使用几乎相等的检查,解释如下:
0 True
1 True
2 True
3 False
4 False
5 False
6 False
7 False