From 40a89fc03d755544bca216fbdb7a612973063b9e Mon Sep 17 00:00:00 2001 From: Isaac Date: Sun, 25 Apr 2021 23:16:59 +0300 Subject: [PATCH 1/6] TST: Added iloc tests for casting from object to numeric dtypes for duplicate columns --- pandas/tests/indexing/test_iloc.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 853c7079a3c1b..92126da99d2ac 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -1186,6 +1186,14 @@ def test_iloc_setitem_series_duplicate_columns(self): df.iloc[:, 0] = df.iloc[:, 0].astype(np.float64) assert df.dtypes.iloc[2] == np.int64 + def test_iloc_setitem_dtypes_duplicate_columns(self): + df = DataFrame([["0", "str", "1.2"]], columns=["a", "b", "b"]) + df.iloc[:, 0] = df.iloc[:, 0].astype("int64") + assert df.dtypes.iloc[0] == np.int64 + + df.iloc[:, 2] = df.iloc[:, 2].astype("float") + assert df.dtypes.iloc[2] == np.float64 + class TestILocCallable: def test_frame_iloc_getitem_callable(self): From 06eac9fabf52110da09fa11e3e0c1af51c619421 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 26 Apr 2021 00:17:43 +0300 Subject: [PATCH 2/6] Added gh reference --- pandas/tests/indexing/test_iloc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 92126da99d2ac..82ef30ac0973b 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -1187,6 +1187,7 @@ def test_iloc_setitem_series_duplicate_columns(self): assert df.dtypes.iloc[2] == np.int64 def test_iloc_setitem_dtypes_duplicate_columns(self): + # GH#22035 df = DataFrame([["0", "str", "1.2"]], columns=["a", "b", "b"]) df.iloc[:, 0] = df.iloc[:, 0].astype("int64") assert df.dtypes.iloc[0] == np.int64 From c24c18508b4bd45efa35c0729385aaa55e27880b Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 26 Apr 2021 00:31:09 +0300 Subject: [PATCH 3/6] Check df with tm.assert_frame_equal --- pandas/tests/indexing/test_iloc.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 82ef30ac0973b..d508f940f26fd 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -1190,10 +1190,12 @@ def test_iloc_setitem_dtypes_duplicate_columns(self): # GH#22035 df = DataFrame([["0", "str", "1.2"]], columns=["a", "b", "b"]) df.iloc[:, 0] = df.iloc[:, 0].astype("int64") - assert df.dtypes.iloc[0] == np.int64 + expected_int = DataFrame([[0, "str", "1.2"]], columns=["a", "b", "b"]) + tm.assert_frame_equal(df, expected_int) df.iloc[:, 2] = df.iloc[:, 2].astype("float") - assert df.dtypes.iloc[2] == np.float64 + expected_float =DataFrame([[0, "str", 1.2]], columns=["a", "b", "b"]) + tm.assert_frame_equal(df, expected_float) class TestILocCallable: From 10bb12eea826d98439706fdfb2d9eb2ca00ec952 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 26 Apr 2021 00:33:33 +0300 Subject: [PATCH 4/6] fix spacing --- pandas/tests/indexing/test_iloc.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index d508f940f26fd..ff74705ad09a6 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -1194,7 +1194,7 @@ def test_iloc_setitem_dtypes_duplicate_columns(self): tm.assert_frame_equal(df, expected_int) df.iloc[:, 2] = df.iloc[:, 2].astype("float") - expected_float =DataFrame([[0, "str", 1.2]], columns=["a", "b", "b"]) + expected_float = DataFrame([[0, "str", 1.2]], columns=["a", "b", "b"]) tm.assert_frame_equal(df, expected_float) From d7600b3d5ff6b46f667aa6fb0afdcaf7e614c2b4 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 26 Apr 2021 01:32:41 +0300 Subject: [PATCH 5/6] parametrize over dtypes --- pandas/tests/indexing/test_iloc.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index ff74705ad09a6..34fa9676f9460 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -1186,16 +1186,13 @@ def test_iloc_setitem_series_duplicate_columns(self): df.iloc[:, 0] = df.iloc[:, 0].astype(np.float64) assert df.dtypes.iloc[2] == np.int64 - def test_iloc_setitem_dtypes_duplicate_columns(self): + @pytest.mark.parametrize(["dtypes", "init_value", "expected_value"], [("int64", "0", 0), ("float", "1.2", 1.2)]) + def test_iloc_setitem_dtypes_duplicate_columns(self, dtypes, init_value, expected_value): # GH#22035 - df = DataFrame([["0", "str", "1.2"]], columns=["a", "b", "b"]) - df.iloc[:, 0] = df.iloc[:, 0].astype("int64") - expected_int = DataFrame([[0, "str", "1.2"]], columns=["a", "b", "b"]) - tm.assert_frame_equal(df, expected_int) - - df.iloc[:, 2] = df.iloc[:, 2].astype("float") - expected_float = DataFrame([[0, "str", 1.2]], columns=["a", "b", "b"]) - tm.assert_frame_equal(df, expected_float) + df = DataFrame([[init_value, "str", "str2"]], columns=["a", "b", "b"]) + df.iloc[:, 0] = df.iloc[:, 0].astype(dtypes) + expected_df = DataFrame([[expected_value, "str", "str2"]], columns=["a", "b", "b"]) + tm.assert_frame_equal(df, expected_df) class TestILocCallable: From ff7ed6e0e740d574f26e60e969d62a2e0bed1dd4 Mon Sep 17 00:00:00 2001 From: Isaac Date: Mon, 26 Apr 2021 01:55:44 +0300 Subject: [PATCH 6/6] pre-commit hooks --- pandas/tests/indexing/test_iloc.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/pandas/tests/indexing/test_iloc.py b/pandas/tests/indexing/test_iloc.py index 34fa9676f9460..ad0d4245d58c3 100644 --- a/pandas/tests/indexing/test_iloc.py +++ b/pandas/tests/indexing/test_iloc.py @@ -1186,12 +1186,19 @@ def test_iloc_setitem_series_duplicate_columns(self): df.iloc[:, 0] = df.iloc[:, 0].astype(np.float64) assert df.dtypes.iloc[2] == np.int64 - @pytest.mark.parametrize(["dtypes", "init_value", "expected_value"], [("int64", "0", 0), ("float", "1.2", 1.2)]) - def test_iloc_setitem_dtypes_duplicate_columns(self, dtypes, init_value, expected_value): + @pytest.mark.parametrize( + ["dtypes", "init_value", "expected_value"], + [("int64", "0", 0), ("float", "1.2", 1.2)], + ) + def test_iloc_setitem_dtypes_duplicate_columns( + self, dtypes, init_value, expected_value + ): # GH#22035 df = DataFrame([[init_value, "str", "str2"]], columns=["a", "b", "b"]) df.iloc[:, 0] = df.iloc[:, 0].astype(dtypes) - expected_df = DataFrame([[expected_value, "str", "str2"]], columns=["a", "b", "b"]) + expected_df = DataFrame( + [[expected_value, "str", "str2"]], columns=["a", "b", "b"] + ) tm.assert_frame_equal(df, expected_df)