Skip to content

Commit c069ce8

Browse files
committed
Revert "Bug in iloc.setitem orienting IntegerArray into the wrong direction (pandas-dev#41288)"
This reverts commit c89b19f.
1 parent 6dc85e1 commit c069ce8

File tree

4 files changed

+14
-21
lines changed

4 files changed

+14
-21
lines changed

pandas/core/indexers.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ def check_setitem_lengths(indexer, value, values) -> bool:
164164
# a) not necessarily 1-D indexers, e.g. tuple
165165
# b) boolean indexers e.g. BoolArray
166166
if is_list_like(value):
167-
if len(indexer) != len(value) and values.ndim == 1:
167+
if len(indexer) != len(value):
168168
# boolean with truth values == len of the value is ok too
169169
if not (
170170
isinstance(indexer, np.ndarray)

pandas/core/internals/blocks.py

+6-1
Original file line numberDiff line numberDiff line change
@@ -970,7 +970,12 @@ def setitem(self, indexer, value):
970970
values[indexer] = value
971971

972972
elif is_ea_value:
973-
values[indexer] = value
973+
# GH#38952
974+
if values.ndim == 1:
975+
values[indexer] = value
976+
else:
977+
# TODO(EA2D): special case not needed with 2D EA
978+
values[indexer] = value.to_numpy(values.dtype).reshape(-1, 1)
974979

975980
else:
976981
# error: Argument 1 to "setitem_datetimelike_compat" has incompatible type

pandas/tests/frame/indexing/test_setitem.py

+6-14
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
PeriodDtype,
1919
)
2020

21-
import pandas as pd
2221
from pandas import (
2322
Categorical,
2423
DataFrame,
@@ -793,29 +792,22 @@ def test_setitem_slice_position(self):
793792
tm.assert_frame_equal(df, expected)
794793

795794
@pytest.mark.parametrize("indexer", [tm.setitem, tm.iloc])
796-
@pytest.mark.parametrize("box", [Series, np.array, list, pd.array])
795+
@pytest.mark.parametrize("box", [Series, np.array, list])
797796
@pytest.mark.parametrize("n", [1, 2, 3])
798-
def test_setitem_slice_indexer_broadcasting_rhs(self, n, box, indexer):
797+
def test_setitem_broadcasting_rhs(self, n, box, indexer):
799798
# GH#40440
799+
# TODO: Add pandas array as box after GH#40933 is fixed
800800
df = DataFrame([[1, 3, 5]] + [[2, 4, 6]] * n, columns=["a", "b", "c"])
801801
indexer(df)[1:] = box([10, 11, 12])
802802
expected = DataFrame([[1, 3, 5]] + [[10, 11, 12]] * n, columns=["a", "b", "c"])
803803
tm.assert_frame_equal(df, expected)
804804

805-
@pytest.mark.parametrize("box", [Series, np.array, list, pd.array])
806-
@pytest.mark.parametrize("n", [1, 2, 3])
807-
def test_setitem_list_indexer_broadcasting_rhs(self, n, box):
808-
# GH#40440
809-
df = DataFrame([[1, 3, 5]] + [[2, 4, 6]] * n, columns=["a", "b", "c"])
810-
df.iloc[list(range(1, n + 1))] = box([10, 11, 12])
811-
expected = DataFrame([[1, 3, 5]] + [[10, 11, 12]] * n, columns=["a", "b", "c"])
812-
tm.assert_frame_equal(df, expected)
813-
814805
@pytest.mark.parametrize("indexer", [tm.setitem, tm.iloc])
815-
@pytest.mark.parametrize("box", [Series, np.array, list, pd.array])
806+
@pytest.mark.parametrize("box", [Series, np.array, list])
816807
@pytest.mark.parametrize("n", [1, 2, 3])
817-
def test_setitem_slice_broadcasting_rhs_mixed_dtypes(self, n, box, indexer):
808+
def test_setitem_broadcasting_rhs_mixed_dtypes(self, n, box, indexer):
818809
# GH#40440
810+
# TODO: Add pandas array as box after GH#40933 is fixed
819811
df = DataFrame(
820812
[[1, 3, 5], ["x", "y", "z"]] + [[2, 4, 6]] * n, columns=["a", "b", "c"]
821813
)

pandas/tests/indexing/test_iloc.py

+1-5
Original file line numberDiff line numberDiff line change
@@ -122,11 +122,7 @@ def test_iloc_setitem_ea_inplace(self, frame_or_series, box, using_array_manager
122122
else:
123123
values = obj[0].values
124124

125-
if frame_or_series is Series:
126-
obj.iloc[:2] = box(arr[2:])
127-
else:
128-
obj.iloc[:2, 0] = box(arr[2:])
129-
125+
obj.iloc[:2] = box(arr[2:])
130126
expected = frame_or_series(np.array([3, 4, 3, 4], dtype="i8"))
131127
tm.assert_equal(obj, expected)
132128

0 commit comments

Comments
 (0)