From d4f39d5f237bad3bff88130a6286e48120cb202c Mon Sep 17 00:00:00 2001 From: Hasan Rashid Date: Wed, 23 Jul 2025 05:16:43 -0400 Subject: [PATCH 1/5] Updating error message to include more details about dataframe --- pandas/core/indexing.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index f1f453cf433cf..a05b8241372be 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1989,7 +1989,10 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): return self._setitem_with_indexer((pi, info_axis[0]), value[0]) raise ValueError( - "Must have equal len keys and value when setting with an iterable" + f"Length mismatch when setting Dataframe with an iterable: " + f"{len(pi)} keys vs {len(value)} values. " + f"Keys: {pi}, Values: {value}. " + f"Both must have the same length." ) elif lplane_indexer == 0 and len(value) == len(self.obj.index): @@ -2017,7 +2020,10 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): else: raise ValueError( - "Must have equal len keys and value when setting with an iterable" + f"Length mismatch when setting Dataframe with an iterable: " + f"{len(pi)} keys vs {len(value)} values. " + f"Keys: {pi}, Values: {value}. " + f"Both must have the same length." ) else: From 7b5d8645d3de0f670a7d8bf30f4a5c295b9dd5a4 Mon Sep 17 00:00:00 2001 From: Hasan Rashid Date: Sun, 27 Jul 2025 00:26:03 -0400 Subject: [PATCH 2/5] Updating error message and testcase --- pandas/core/indexing.py | 12 ++++-------- pandas/tests/indexing/test_indexing.py | 10 ++++++---- 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index a05b8241372be..437c0cccb10ba 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1989,10 +1989,8 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): return self._setitem_with_indexer((pi, info_axis[0]), value[0]) raise ValueError( - f"Length mismatch when setting Dataframe with an iterable: " - f"{len(pi)} keys vs {len(value)} values. " - f"Keys: {pi}, Values: {value}. " - f"Both must have the same length." + f"Length mismatch when setting Dataframe with an iterable." + f"Keys: {pi}, Values: {value}" ) elif lplane_indexer == 0 and len(value) == len(self.obj.index): @@ -2020,10 +2018,8 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): else: raise ValueError( - f"Length mismatch when setting Dataframe with an iterable: " - f"{len(pi)} keys vs {len(value)} values. " - f"Keys: {pi}, Values: {value}. " - f"Both must have the same length." + f"Length mismatch when setting Dataframe with an iterable." + f"Keys: {pi}, Values: {value}" ) else: diff --git a/pandas/tests/indexing/test_indexing.py b/pandas/tests/indexing/test_indexing.py index 113eb6c2b2c31..6d1f42adf7c6b 100644 --- a/pandas/tests/indexing/test_indexing.py +++ b/pandas/tests/indexing/test_indexing.py @@ -46,7 +46,7 @@ def test_setitem_ndarray_1d(self): df["bar"] = np.zeros(10, dtype=complex) # invalid - msg = "Must have equal len keys and value when setting with an iterable" + msg = "Length mismatch when setting Dataframe with an iterable" with pytest.raises(ValueError, match=msg): df.loc[df.index[2:5], "bar"] = np.array([2.33j, 1.23 + 0.1j, 2.2, 1.0]) @@ -67,7 +67,7 @@ def test_setitem_ndarray_1d_2(self): df["foo"] = np.zeros(10, dtype=np.float64) df["bar"] = np.zeros(10, dtype=complex) - msg = "Must have equal len keys and value when setting with an iterable" + msg = "Length mismatch when setting Dataframe with an iterable" with pytest.raises(ValueError, match=msg): df[2:5] = np.arange(1, 4) * 1j @@ -1036,7 +1036,7 @@ def test_scalar_setitem_with_nested_value(value): df = DataFrame({"A": [1, 2, 3]}) msg = "|".join( [ - "Must have equal len keys and value", + "Length mismatch when setting Dataframe with an iterable", "setting an array element with a sequence", ] ) @@ -1046,7 +1046,9 @@ def test_scalar_setitem_with_nested_value(value): # TODO For object dtype this happens as well, but should we rather preserve # the nested data and set as such? df = DataFrame({"A": [1, 2, 3], "B": np.array([1, "a", "b"], dtype=object)}) - with pytest.raises(ValueError, match="Must have equal len keys and value"): + with pytest.raises( + ValueError, match="Length mismatch when setting Dataframe with an iterable" + ): df.loc[0, "B"] = value # if isinstance(value, np.ndarray): # assert (df.loc[0, "B"] == value).all() From b539868d39ad0797d2bb1301a560b4155fbd1fa9 Mon Sep 17 00:00:00 2001 From: Hasan Rashid Date: Sun, 27 Jul 2025 12:39:38 -0400 Subject: [PATCH 3/5] Update test_setitem and test_slice with modified error message --- pandas/tests/frame/indexing/test_setitem.py | 2 +- pandas/tests/indexing/multiindex/test_slice.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/frame/indexing/test_setitem.py b/pandas/tests/frame/indexing/test_setitem.py index 20dd7b0c4d3e7..e8ca540f39696 100644 --- a/pandas/tests/frame/indexing/test_setitem.py +++ b/pandas/tests/frame/indexing/test_setitem.py @@ -1098,7 +1098,7 @@ def test_setitem_loc_empty_indexer_raises_with_non_empty_value(self, box): indexer = box([], dtype="object") else: indexer = box([]) - msg = "Must have equal len keys and value when setting with an iterable" + msg = "Length mismatch when setting Dataframe with an iterable" with pytest.raises(ValueError, match=msg): df.loc[indexer, ["b"]] = [1] diff --git a/pandas/tests/indexing/multiindex/test_slice.py b/pandas/tests/indexing/multiindex/test_slice.py index 7f298e9bdd375..468b31920a189 100644 --- a/pandas/tests/indexing/multiindex/test_slice.py +++ b/pandas/tests/indexing/multiindex/test_slice.py @@ -660,7 +660,7 @@ def test_per_axis_per_level_setitem(self): [[100], [100, 100]], dtype="int64" ) - msg = "Must have equal len keys and value when setting with an iterable" + msg = "Length mismatch when setting Dataframe with an iterable" with pytest.raises(ValueError, match=msg): df.loc[(slice(None), 1), (slice(None), ["foo"])] = np.array( [100, 100, 100, 100], dtype="int64" From b7dd182d39f5f5d39c2ee40687bf5489ffd4779b Mon Sep 17 00:00:00 2001 From: Hasan Rashid Date: Sun, 27 Jul 2025 13:03:09 -0400 Subject: [PATCH 4/5] Updating test_multiindex_assignment_single_dtype method in testsetindex.py --- pandas/tests/indexing/multiindex/test_setitem.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pandas/tests/indexing/multiindex/test_setitem.py b/pandas/tests/indexing/multiindex/test_setitem.py index d732cb4d7fbbc..c5d6298ed4527 100644 --- a/pandas/tests/indexing/multiindex/test_setitem.py +++ b/pandas/tests/indexing/multiindex/test_setitem.py @@ -225,7 +225,7 @@ def test_multiindex_assignment_single_dtype(self): tm.assert_series_equal(df.loc[4, "c"], exp) # invalid assignments - msg = "Must have equal len keys and value when setting with an iterable" + msg = "Length mismatch when setting Dataframe with an iterable" with pytest.raises(ValueError, match=msg): df.loc[4, "c"] = [0, 1, 2, 3] From 96089c4d7b05cb99a2153eac2eeaed815ceda795 Mon Sep 17 00:00:00 2001 From: Hasan Rashid Date: Sun, 27 Jul 2025 18:12:16 -0400 Subject: [PATCH 5/5] Indentation fix --- pandas/core/indexing.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/core/indexing.py b/pandas/core/indexing.py index 437c0cccb10ba..4a8792f72a604 100644 --- a/pandas/core/indexing.py +++ b/pandas/core/indexing.py @@ -1989,7 +1989,7 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): return self._setitem_with_indexer((pi, info_axis[0]), value[0]) raise ValueError( - f"Length mismatch when setting Dataframe with an iterable." + f"Length mismatch when setting Dataframe with an iterable. " f"Keys: {pi}, Values: {value}" ) @@ -2018,7 +2018,7 @@ def _setitem_with_indexer_split_path(self, indexer, value, name: str): else: raise ValueError( - f"Length mismatch when setting Dataframe with an iterable." + f"Length mismatch when setting Dataframe with an iterable. " f"Keys: {pi}, Values: {value}" )