我可以使用pandas.Series.equals
比较两个Pandas系列的完全相等。是否有相应的函数或参数来检查元素是否等于精度的某些ε?
你可以使用numpy.allclose
:
numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)
如果两个数组在容差范围内在元素方面相等,则返回
True
。公差值是正的,通常是非常小的数字。将相对差异(
rtol * abs(b)
)和绝对差值atol
相加,以与a
和b
之间的绝对差异进行比较。
numpy
适用于pandas.Series
物体,所以如果你有两个 - s1
和s2
,你可以简单地做:
np.allclose(s1, s2, atol=...)
其中atol
是你的公差值。
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])
如果你想避免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位数。
使用断言不好,但如果你想避免numpy,这是一种方法。