比较两个大熊猫系列的浮点接近相等?

问题描述 投票:3回答:3

我可以使用pandas.Series.equals比较两个Pandas系列的完全相等。是否有相应的函数或参数来检查元素是否等于精度的某些ε?

python pandas numpy floating-point equality
3个回答
2
投票

你可以使用numpy.allclose

numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)

如果两个数组在容差范围内在元素方面相等,则返回True

公差值是正的,通常是非常小的数字。将相对差异(rtol * abs(b))和绝对差值atol相加,以与ab之间的绝对差异进行比较。

numpy适用于pandas.Series物体,所以如果你有两个 - s1s2,你可以简单地做:

np.allclose(s1, s2, atol=...) 

其中atol是你的公差值。


1
投票

Numpy适用于熊猫系列。但是必须要小心索引的顺序(或者pandas DataFrame的列和索引)

例如

series_1 = pd.Series(data=[0,1], index=['a','b'])
series_2 = pd.Series(data=[1,0], index=['b','a']) 
np.allclose(series_1,series_2)

将返回False

解决方法是使用一个pandas系列的索引

np.allclose(series_1, series_2.loc[series_1.index])

1
投票

如果你想避免numpy,还有另一种方法,使用assert_series_equal

import pandas as pd
s1 = pd.Series([1.333333, 1.666666])
s2 = pd.Series([1.333, 1.666])

from pandas.testing import assert_series_equal
assert_series_equal(s1,s2)  

提出了一个AssertionError。所以使用check_less_precise标志

assert_series_equal(s1,s2, check_less_precise= True)  # No assertion error

这不会引发AssertionError,因为check_less_precise只比较十进制后的3位数。

See the docs here

使用断言不好,但如果你想避免numpy,这是一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.