From 60c3f9fd1320b057a906340c21bb14a5fd4f95c1 Mon Sep 17 00:00:00 2001 From: Ryan Nazareth Date: Sun, 10 Nov 2019 01:45:32 +0000 Subject: [PATCH 1/6] Add tests for single level indexing with loc(axis=1) --- .../tests/indexing/multiindex/test_slice.py | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index f1f11285696f9..683a3711349b9 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -492,6 +492,29 @@ def test_loc_axis_arguments(self): with pytest.raises(ValueError): df.loc(axis="foo")[:, :, ["C1", "C3"]] + def test_loc_axis_single_level_indexer(self): + + # test single level indexing on Multindex column dataframe + df1 = pd.DataFrame( + np.arange(27).reshape(3, 9), + columns=pd.MultiIndex.from_product( + [["a1", "a2", "a3"], ["b1", "b2", "b3"]] + ), + ) + result = df1.loc(axis=1)["a1":"a2"] + expected = df1.iloc[:, :-3] + tm.assert_frame_equal(result, expected) + result = df1.loc(axis=1)["a1"] + expected = df1.iloc[:, :3] + expected.columns = ["b1", "b2", "b3"] + tm.assert_frame_equal(result, expected) + + # test single level indexing on single index column data frame + df2 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=["a", "b", "c"]) + result = df2.loc(axis=1)["a"] + expected = pd.Series([0, 3, 6], dtype="int64", name="a") + tm.assert_series_equal(result, expected) + def test_per_axis_per_level_setitem(self): # test index maker From e8a27bbed987e701149591cfc2d2223a561b8320 Mon Sep 17 00:00:00 2001 From: Ryan Nazareth Date: Sun, 10 Nov 2019 03:38:16 +0000 Subject: [PATCH 2/6] remove dtype check to pass CI --- pandas/tests/indexing/multiindex/test_slice.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index 683a3711349b9..44b6db7cf9f57 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -512,8 +512,8 @@ def test_loc_axis_single_level_indexer(self): # test single level indexing on single index column data frame df2 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=["a", "b", "c"]) result = df2.loc(axis=1)["a"] - expected = pd.Series([0, 3, 6], dtype="int64", name="a") - tm.assert_series_equal(result, expected) + expected = pd.Series([0, 3, 6], name="a") + tm.assert_series_equal(result, expected, check_dtype=False) def test_per_axis_per_level_setitem(self): From 184169e1a174f7d9451a4da4cac2007bd5f179df Mon Sep 17 00:00:00 2001 From: Ryan Nazareth Date: Sun, 10 Nov 2019 14:08:01 +0000 Subject: [PATCH 3/6] Split simple df test into diff function --- pandas/tests/indexing/multiindex/test_slice.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index 44b6db7cf9f57..502c5556580cf 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -492,9 +492,10 @@ def test_loc_axis_arguments(self): with pytest.raises(ValueError): df.loc(axis="foo")[:, :, ["C1", "C3"]] - def test_loc_axis_single_level_indexer(self): + def test_loc_axis_single_level_indexer_multiindex_col_df(self): - # test single level indexing on Multindex column dataframe + # GH29519 + # test with single level multiple columns slice df1 = pd.DataFrame( np.arange(27).reshape(3, 9), columns=pd.MultiIndex.from_product( @@ -503,15 +504,23 @@ def test_loc_axis_single_level_indexer(self): ) result = df1.loc(axis=1)["a1":"a2"] expected = df1.iloc[:, :-3] + tm.assert_frame_equal(result, expected) + + # GH29519 + # test with single level single column slice result = df1.loc(axis=1)["a1"] expected = df1.iloc[:, :3] expected.columns = ["b1", "b2", "b3"] + tm.assert_frame_equal(result, expected) + def test_loc_ax_single_level_indexer_simple_df(self): + + # GH29519 # test single level indexing on single index column data frame - df2 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=["a", "b", "c"]) - result = df2.loc(axis=1)["a"] + df = pd.DataFrame(np.arange(9).reshape(3, 3), columns=["a", "b", "c"]) + result = df.loc(axis=1)["a"] expected = pd.Series([0, 3, 6], name="a") tm.assert_series_equal(result, expected, check_dtype=False) From ed9075b55ab0c02e546875e57c1f17cbcaef9f84 Mon Sep 17 00:00:00 2001 From: Ryan Nazareth Date: Sun, 10 Nov 2019 18:24:10 +0000 Subject: [PATCH 4/6] Remove check_dtype=False --- pandas/tests/indexing/multiindex/test_slice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index 502c5556580cf..c436e2675bc00 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -522,7 +522,7 @@ def test_loc_ax_single_level_indexer_simple_df(self): df = pd.DataFrame(np.arange(9).reshape(3, 3), columns=["a", "b", "c"]) result = df.loc(axis=1)["a"] expected = pd.Series([0, 3, 6], name="a") - tm.assert_series_equal(result, expected, check_dtype=False) + tm.assert_series_equal(result, expected) def test_per_axis_per_level_setitem(self): From bd3184193f5ba8d3abf406ce778a7afb4e2da707 Mon Sep 17 00:00:00 2001 From: Ryan Nazareth Date: Sun, 10 Nov 2019 18:40:41 +0000 Subject: [PATCH 5/6] Split first test into sepaarate funcs --- .../tests/indexing/multiindex/test_slice.py | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index c436e2675bc00..22d1e6845e77b 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -492,25 +492,31 @@ def test_loc_axis_arguments(self): with pytest.raises(ValueError): df.loc(axis="foo")[:, :, ["C1", "C3"]] - def test_loc_axis_single_level_indexer_multiindex_col_df(self): + def test_loc_axis_single_level_multi_col_indexing_multiindex_col_df(self): # GH29519 - # test with single level multiple columns slice - df1 = pd.DataFrame( + df = pd.DataFrame( np.arange(27).reshape(3, 9), columns=pd.MultiIndex.from_product( [["a1", "a2", "a3"], ["b1", "b2", "b3"]] ), ) - result = df1.loc(axis=1)["a1":"a2"] - expected = df1.iloc[:, :-3] + result = df.loc(axis=1)["a1":"a2"] + expected = df.iloc[:, :-3] tm.assert_frame_equal(result, expected) + def test_loc_axis_single_level_single_col_indexing_multiindex_col_df(self): + # GH29519 - # test with single level single column slice - result = df1.loc(axis=1)["a1"] - expected = df1.iloc[:, :3] + df = pd.DataFrame( + np.arange(27).reshape(3, 9), + columns=pd.MultiIndex.from_product( + [["a1", "a2", "a3"], ["b1", "b2", "b3"]] + ), + ) + result = df.loc(axis=1)["a1"] + expected = df.iloc[:, :3] expected.columns = ["b1", "b2", "b3"] tm.assert_frame_equal(result, expected) From f47c322df04b87d569fd54a5ac7fe40b97be00b2 Mon Sep 17 00:00:00 2001 From: Ryan Nazareth Date: Tue, 12 Nov 2019 23:34:41 +0000 Subject: [PATCH 6/6] change from list to np.array --- pandas/tests/indexing/multiindex/test_slice.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index 22d1e6845e77b..f279b5517c3f6 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -527,7 +527,7 @@ def test_loc_ax_single_level_indexer_simple_df(self): # test single level indexing on single index column data frame df = pd.DataFrame(np.arange(9).reshape(3, 3), columns=["a", "b", "c"]) result = df.loc(axis=1)["a"] - expected = pd.Series([0, 3, 6], name="a") + expected = pd.Series(np.array([0, 3, 6]), name="a") tm.assert_series_equal(result, expected) def test_per_axis_per_level_setitem(self):