我可以使用pandas.Series.equals
比较两个Pandas系列的完全相等。是否有相应的函数或参数来检查元素是否等于精度的某些ε?
答案 0 :(得分:2)
您可以使用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
是容差值。
答案 1 :(得分: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])
答案 2 :(得分: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位数字。
使用断言不是很好,但是如果要避免使用numpy,这是一种方法。