From 8531b984c9c340d21fbccdc47bb760265e454b78 Mon Sep 17 00:00:00 2001 From: Brock Date: Sun, 22 Aug 2021 15:59:10 -0700 Subject: [PATCH 1/2] TST: DataFrame.mad with nullable dtype --- pandas/tests/frame/test_reductions.py | 42 +++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/pandas/tests/frame/test_reductions.py b/pandas/tests/frame/test_reductions.py index 5f769946335ed..95d905bcd3fa3 100644 --- a/pandas/tests/frame/test_reductions.py +++ b/pandas/tests/frame/test_reductions.py @@ -1686,6 +1686,48 @@ def test_minmax_extensionarray(method, numeric_only): tm.assert_series_equal(result, expected) +def test_mad_nullable_integer(): + # GH#33036 + df = DataFrame(np.random.randn(100, 4).astype(np.int64)) + df2 = df.astype("Int64") + + result = df2.mad() + expected = df.mad() + tm.assert_series_equal(result, expected) + + result = df2.mad(axis=1) + expected = df.mad(axis=1) + tm.assert_series_equal(result, expected) + + # case with NAs present + df2.iloc[::2, 1] = pd.NA + + result = df2.mad() + expected = df.mad() + expected[1] = df.iloc[1::2, 1].mad() + tm.assert_series_equal(result, expected) + + result = df2.mad(axis=1) + expected = df.mad(axis=1) + expected[::2] = df.T.loc[[0, 2, 3], ::2].mad() + tm.assert_series_equal(result, expected) + + +@pytest.mark.xfail(reason="GH#42895 caused by lack of 2D EA") +def test_mad_nullable_integer_all_na(): + # GH#33036 + df = DataFrame(np.random.randn(100, 4).astype(np.int64)) + df2 = df.astype("Int64") + + # case with all-NA row/column + df2.iloc[:, 1] = pd.NA # FIXME: this doesn't operate in-place + df2.iloc[:, 1] = pd.array([pd.NA] * len(df2), dtype="Int64") + result = df2.mad() + expected = df.mad() + expected[1] = pd.NA + tm.assert_series_equal(result, expected) + + @pytest.mark.parametrize("meth", ["max", "min", "sum", "mean", "median"]) def test_groupby_regular_arithmetic_equivalent(meth): # GH#40660 From d40bc942406c25cc46a26f0c404b4b6820250787 Mon Sep 17 00:00:00 2001 From: Brock Date: Mon, 23 Aug 2021 14:50:05 -0700 Subject: [PATCH 2/2] Use any_signed_int_ea_dtype --- pandas/tests/frame/test_reductions.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/pandas/tests/frame/test_reductions.py b/pandas/tests/frame/test_reductions.py index 95d905bcd3fa3..886cdfb7d76b0 100644 --- a/pandas/tests/frame/test_reductions.py +++ b/pandas/tests/frame/test_reductions.py @@ -1686,10 +1686,10 @@ def test_minmax_extensionarray(method, numeric_only): tm.assert_series_equal(result, expected) -def test_mad_nullable_integer(): +def test_mad_nullable_integer(any_signed_int_ea_dtype): # GH#33036 df = DataFrame(np.random.randn(100, 4).astype(np.int64)) - df2 = df.astype("Int64") + df2 = df.astype(any_signed_int_ea_dtype) result = df2.mad() expected = df.mad() @@ -1714,14 +1714,14 @@ def test_mad_nullable_integer(): @pytest.mark.xfail(reason="GH#42895 caused by lack of 2D EA") -def test_mad_nullable_integer_all_na(): +def test_mad_nullable_integer_all_na(any_signed_int_ea_dtype): # GH#33036 df = DataFrame(np.random.randn(100, 4).astype(np.int64)) - df2 = df.astype("Int64") + df2 = df.astype(any_signed_int_ea_dtype) # case with all-NA row/column df2.iloc[:, 1] = pd.NA # FIXME: this doesn't operate in-place - df2.iloc[:, 1] = pd.array([pd.NA] * len(df2), dtype="Int64") + df2.iloc[:, 1] = pd.array([pd.NA] * len(df2), dtype=any_signed_int_ea_dtype) result = df2.mad() expected = df.mad() expected[1] = pd.NA