From 12d0b4db65fb681b7aca30209711ceb997f3d4b7 Mon Sep 17 00:00:00 2001 From: matteosantama Date: Tue, 19 May 2020 23:24:10 +0000 Subject: [PATCH 1/3] TST: GH28813 test .diff() on Sparse dtype --- pandas/tests/frame/methods/test_diff.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pandas/tests/frame/methods/test_diff.py b/pandas/tests/frame/methods/test_diff.py index 6a9248e1cba1e..4ab0e80b73d90 100644 --- a/pandas/tests/frame/methods/test_diff.py +++ b/pandas/tests/frame/methods/test_diff.py @@ -36,6 +36,14 @@ def test_diff(self, datetime_frame): ).astype("float64") tm.assert_frame_equal(result, expected) + # Result should be the same for sparse df, see GH28813 + arr = [[0, 1], [1, 0]] + normal = pd.DataFrame(arr) + sparse = pd.DataFrame(arr, dtype='Sparse[int]') + # we don't check dtype because one is sparse and the other isn't + tm.assert_frame_equal(normal.diff(), sparse.diff(), check_dtype=False) + + @pytest.mark.parametrize("tz", [None, "UTC"]) def test_diff_datetime_axis0(self, tz): # GH#18578 From 02c4a85908d8cb6906feeb539be5b694e746a1a4 Mon Sep 17 00:00:00 2001 From: matteosantama Date: Wed, 20 May 2020 01:02:42 +0000 Subject: [PATCH 2/3] TST: GH28813 test .diff() on Sparse dtype --- pandas/tests/frame/methods/test_diff.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pandas/tests/frame/methods/test_diff.py b/pandas/tests/frame/methods/test_diff.py index 4ab0e80b73d90..2640e2192d798 100644 --- a/pandas/tests/frame/methods/test_diff.py +++ b/pandas/tests/frame/methods/test_diff.py @@ -39,11 +39,10 @@ def test_diff(self, datetime_frame): # Result should be the same for sparse df, see GH28813 arr = [[0, 1], [1, 0]] normal = pd.DataFrame(arr) - sparse = pd.DataFrame(arr, dtype='Sparse[int]') + sparse = pd.DataFrame(arr, dtype="Sparse[int]") # we don't check dtype because one is sparse and the other isn't tm.assert_frame_equal(normal.diff(), sparse.diff(), check_dtype=False) - @pytest.mark.parametrize("tz", [None, "UTC"]) def test_diff_datetime_axis0(self, tz): # GH#18578 From 7e3256ba22eb4957c35ff582282029f0904332b7 Mon Sep 17 00:00:00 2001 From: matteosantama Date: Wed, 20 May 2020 16:38:12 +0000 Subject: [PATCH 3/3] TST: GH28813 pull sparse diff() test into its own function --- pandas/tests/frame/methods/test_diff.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/pandas/tests/frame/methods/test_diff.py b/pandas/tests/frame/methods/test_diff.py index 2640e2192d798..e876e40aa2eb1 100644 --- a/pandas/tests/frame/methods/test_diff.py +++ b/pandas/tests/frame/methods/test_diff.py @@ -36,13 +36,6 @@ def test_diff(self, datetime_frame): ).astype("float64") tm.assert_frame_equal(result, expected) - # Result should be the same for sparse df, see GH28813 - arr = [[0, 1], [1, 0]] - normal = pd.DataFrame(arr) - sparse = pd.DataFrame(arr, dtype="Sparse[int]") - # we don't check dtype because one is sparse and the other isn't - tm.assert_frame_equal(normal.diff(), sparse.diff(), check_dtype=False) - @pytest.mark.parametrize("tz", [None, "UTC"]) def test_diff_datetime_axis0(self, tz): # GH#18578 @@ -165,3 +158,14 @@ def test_diff_axis1_mixed_dtypes_negative_periods(self): result = df.diff(axis=1, periods=-1) tm.assert_frame_equal(result, expected) + + def test_diff_sparse(self): + # GH#28813 .diff() should work for sparse dataframes as well + sparse_df = pd.DataFrame([[0, 1], [1, 0]], dtype="Sparse[int]") + + result = sparse_df.diff() + expected = pd.DataFrame( + [[np.nan, np.nan], [1.0, -1.0]], dtype=pd.SparseDtype("float", 0.0) + ) + + tm.assert_frame_equal(result, expected)