熊猫单元测试:如何断言NaT和NaN值的平等?

Ber*_*pac 5 python unit-testing numpy nan pandas

在NumPy和Pandas,nan != nanNaT != NaT.因此,在单元测试期间比较结果时,如何断言返回值是其中一个值?assertEqual即使我使用,简单自然也会失败pandas.util.testing.

Ale*_*ley 6

如果你比较标量,一个方法是使用assertTrueisnull.例如,在DataFrame单元tests(pandas/tests/test_frame.py)中,您可以找到如下测试:

self.assertTrue(com.isnull(df.ix['c', 'timestamp']))
Run Code Online (Sandbox Code Playgroud)

(com是一个别名pandas/core/common.py,因此com.isnull调用相同的底层函数pd.isnull.)

另一方面,如果您将Series或DataFrames与null值进行比较以获得相等性,则会由tm.assert_series_equal和自动处理tm.assert_frame_equal.例如:

>>> import pandas.util.testing as tm
>>> df = pd.DataFrame({'a': [1, np.nan]})
>>> df
    a
0   1
1 NaN
Run Code Online (Sandbox Code Playgroud)

通常,NaN不等于NaN:

>>> df == df
       a
0   True
1  False
Run Code Online (Sandbox Code Playgroud)

assert_frame_equal过程NaN与自身相同:

>>> tm.assert_frame_equal(df, df)
# no AssertionError raised
Run Code Online (Sandbox Code Playgroud)


Ale*_*lex 3

在进行assert_frame_equal检查之前,您可以在数据帧上使用.fillna()方法将空值替换为其他不会出现在您的值中的值。您可能还想阅读这些有关如何使用 .fillna() 方法的示例。