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

时间:2017-10-03 22:55:31

标签: python pandas numpy floating-point equality

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

3 个答案:

答案 0 :(得分: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 :(得分: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位数字。

See the docs here

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