From fc7e38a08b6d16066bb72be0985b923c8bdb46c0 Mon Sep 17 00:00:00 2001 From: ganevgv Date: Sun, 10 Nov 2019 16:38:54 +0000 Subject: [PATCH 1/4] add test for .loc indexing Index type preservation --- pandas/tests/frame/test_indexing.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index e215c90d2eb04..1280b9db9b29a 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1944,6 +1944,29 @@ def test_set_value_resize(self, float_frame): with pytest.raises(ValueError, match=msg): res3._set_value("foobar", "baz", "sam") + def test_loc_indexing_preserves_index_dtype(self): + # GH 15166 + df = DataFrame( + data=np.arange(2, 22, 2), + index=pd.MultiIndex( + levels=[pd.CategoricalIndex(["a", "b"]), range(10)], + codes=[[0] * 5 + [1] * 5, range(10)], + names=["Index1", "Index2"], + ), + ) + + result_1 = df.index.levels[0] + result_2 = df.loc[["a"]].index.levels[0] + expected = pd.CategoricalIndex( + ["a", "b"], + categories=["a", "b"], + ordered=False, + name="Index1", + dtype="category", + ) + tm.assert_index_equal(result_1, expected) + tm.assert_index_equal(result_2, expected) + def test_set_value_with_index_dtype_change(self): df_orig = DataFrame(np.random.randn(3, 3), index=range(3), columns=list("ABC")) From cda39a1726a5c10a8b21c1ab884a6ce1b3c41e1c Mon Sep 17 00:00:00 2001 From: ganevgv Date: Sun, 10 Nov 2019 18:47:26 +0000 Subject: [PATCH 2/4] rename test --- pandas/tests/frame/test_indexing.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 1280b9db9b29a..d1422399c96bd 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1944,7 +1944,7 @@ def test_set_value_resize(self, float_frame): with pytest.raises(ValueError, match=msg): res3._set_value("foobar", "baz", "sam") - def test_loc_indexing_preserves_index_dtype(self): + def test_loc_indexing_preserves_index_category_dtype(self): # GH 15166 df = DataFrame( data=np.arange(2, 22, 2), From 3a8788006b159785047bafe6e166a0e4eff256ba Mon Sep 17 00:00:00 2001 From: ganevgv Date: Mon, 11 Nov 2019 21:54:09 +0000 Subject: [PATCH 3/4] restrucure test --- pandas/tests/frame/test_indexing.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index d1422399c96bd..4b414c5296365 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1955,8 +1955,6 @@ def test_loc_indexing_preserves_index_category_dtype(self): ), ) - result_1 = df.index.levels[0] - result_2 = df.loc[["a"]].index.levels[0] expected = pd.CategoricalIndex( ["a", "b"], categories=["a", "b"], @@ -1964,8 +1962,12 @@ def test_loc_indexing_preserves_index_category_dtype(self): name="Index1", dtype="category", ) - tm.assert_index_equal(result_1, expected) - tm.assert_index_equal(result_2, expected) + + result = df.index.levels[0] + tm.assert_index_equal(result, expected) + + result = df.loc[["a"]].index.levels[0] + tm.assert_index_equal(result, expected) def test_set_value_with_index_dtype_change(self): df_orig = DataFrame(np.random.randn(3, 3), index=range(3), columns=list("ABC")) From 2478ed89db3ed2843e9a964e20a8be926f6a0551 Mon Sep 17 00:00:00 2001 From: ganevgv Date: Tue, 12 Nov 2019 23:36:15 +0000 Subject: [PATCH 4/4] move test to TestDataFrameIndexingCategorical class --- pandas/tests/frame/test_indexing.py | 50 ++++++++++++++--------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/pandas/tests/frame/test_indexing.py b/pandas/tests/frame/test_indexing.py index 4b414c5296365..61bf91d3018eb 100644 --- a/pandas/tests/frame/test_indexing.py +++ b/pandas/tests/frame/test_indexing.py @@ -1944,31 +1944,6 @@ def test_set_value_resize(self, float_frame): with pytest.raises(ValueError, match=msg): res3._set_value("foobar", "baz", "sam") - def test_loc_indexing_preserves_index_category_dtype(self): - # GH 15166 - df = DataFrame( - data=np.arange(2, 22, 2), - index=pd.MultiIndex( - levels=[pd.CategoricalIndex(["a", "b"]), range(10)], - codes=[[0] * 5 + [1] * 5, range(10)], - names=["Index1", "Index2"], - ), - ) - - expected = pd.CategoricalIndex( - ["a", "b"], - categories=["a", "b"], - ordered=False, - name="Index1", - dtype="category", - ) - - result = df.index.levels[0] - tm.assert_index_equal(result, expected) - - result = df.loc[["a"]].index.levels[0] - tm.assert_index_equal(result, expected) - def test_set_value_with_index_dtype_change(self): df_orig = DataFrame(np.random.randn(3, 3), index=range(3), columns=list("ABC")) @@ -3881,3 +3856,28 @@ def test_functions_no_warnings(self): df["group"] = pd.cut( df.value, range(0, 105, 10), right=False, labels=labels ) + + def test_loc_indexing_preserves_index_category_dtype(self): + # GH 15166 + df = DataFrame( + data=np.arange(2, 22, 2), + index=pd.MultiIndex( + levels=[pd.CategoricalIndex(["a", "b"]), range(10)], + codes=[[0] * 5 + [1] * 5, range(10)], + names=["Index1", "Index2"], + ), + ) + + expected = pd.CategoricalIndex( + ["a", "b"], + categories=["a", "b"], + ordered=False, + name="Index1", + dtype="category", + ) + + result = df.index.levels[0] + tm.assert_index_equal(result, expected) + + result = df.loc[["a"]].index.levels[0] + tm.assert_index_equal(result, expected)