From 84ac34760c5674e18d128bf1212a0eb97feee844 Mon Sep 17 00:00:00 2001 From: arredond Date: Wed, 21 Apr 2021 14:29:37 +0200 Subject: [PATCH 1/3] BUG: GH41044 - test loc dict assig --- pandas/tests/indexing/test_loc.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 97b3412ce626e..19884e7b41e24 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -2700,3 +2700,13 @@ def test_loc_setitem(self, string_series): string_series.loc[d2] = 6 assert string_series[d1] == 4 assert string_series[d2] == 6 + + def test_loc_dict_assign(self): + # GH41044 + dfo = DataFrame({"A": ["abc", "def"], "B": ["ghi", "jkl"]}, dtype="object") + dfs = DataFrame({"A": ["abc", "def"], "B": ["ghi", "jkl"]}, dtype="string") + + dfo.loc[0, :] = {"A": "newA", "B": "newB"} + dfs.loc[0, :] = {"A": "newA", "B": "newB"} + + tm.assert_frame_equal(dfo, dfs, check_dtype=False) From b61a03852bf3025b7f16557bf4c807e06ef3a11d Mon Sep 17 00:00:00 2001 From: arredond Date: Wed, 21 Apr 2021 16:54:45 +0200 Subject: [PATCH 2/3] declare expected explicitly and parametrize dtypes to test --- pandas/tests/indexing/test_loc.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index 19884e7b41e24..c20c83a5b54ac 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -2701,12 +2701,12 @@ def test_loc_setitem(self, string_series): assert string_series[d1] == 4 assert string_series[d2] == 6 - def test_loc_dict_assign(self): + @pytest.mark.parametrize("dtype", ["object", "string"]) + def test_loc_assign_dict_to_row(self, dtype): # GH41044 - dfo = DataFrame({"A": ["abc", "def"], "B": ["ghi", "jkl"]}, dtype="object") - dfs = DataFrame({"A": ["abc", "def"], "B": ["ghi", "jkl"]}, dtype="string") + df = DataFrame({"A": ["abc", "def"], "B": ["ghi", "jkl"]}, dtype=dtype) + df.loc[0, :] = {"A": "newA", "B": "newB"} - dfo.loc[0, :] = {"A": "newA", "B": "newB"} - dfs.loc[0, :] = {"A": "newA", "B": "newB"} + expected = DataFrame({"A": ["newA", "def"], "B": ["newB", "jkl"]}) - tm.assert_frame_equal(dfo, dfs, check_dtype=False) + tm.assert_frame_equal(df, expected, check_dtype=False) From 52b9ef56d9f0801f6984eb07536bb63dc553b572 Mon Sep 17 00:00:00 2001 From: arredond Date: Wed, 21 Apr 2021 23:21:43 +0200 Subject: [PATCH 3/3] add dtype to expected --- pandas/tests/indexing/test_loc.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/indexing/test_loc.py b/pandas/tests/indexing/test_loc.py index c20c83a5b54ac..11391efde4956 100644 --- a/pandas/tests/indexing/test_loc.py +++ b/pandas/tests/indexing/test_loc.py @@ -2707,6 +2707,6 @@ def test_loc_assign_dict_to_row(self, dtype): df = DataFrame({"A": ["abc", "def"], "B": ["ghi", "jkl"]}, dtype=dtype) df.loc[0, :] = {"A": "newA", "B": "newB"} - expected = DataFrame({"A": ["newA", "def"], "B": ["newB", "jkl"]}) + expected = DataFrame({"A": ["newA", "def"], "B": ["newB", "jkl"]}, dtype=dtype) - tm.assert_frame_equal(df, expected, check_dtype=False) + tm.assert_frame_equal(df, expected)