|
8 | 8 |
|
9 | 9 |
|
10 | 10 | class BaseSetitemTests(BaseExtensionTests):
|
| 11 | + @pytest.fixture( |
| 12 | + params=[ |
| 13 | + lambda x: x.index, |
| 14 | + lambda x: list(x.index), |
| 15 | + lambda x: slice(None), |
| 16 | + lambda x: slice(0, len(x)), |
| 17 | + lambda x: range(len(x)), |
| 18 | + lambda x: list(range(len(x))), |
| 19 | + lambda x: np.ones(len(x), dtype=bool), |
| 20 | + ], |
| 21 | + ids=[ |
| 22 | + "index", |
| 23 | + "list[index]", |
| 24 | + "null_slice", |
| 25 | + "full_slice", |
| 26 | + "range", |
| 27 | + "list(range)", |
| 28 | + "mask", |
| 29 | + ], |
| 30 | + ) |
| 31 | + def full_indexer(self, request): |
| 32 | + """ |
| 33 | + Fixture for an indexer to pass to obj.loc to get/set the full length of the |
| 34 | + object. |
| 35 | +
|
| 36 | + In some cases, assumes that obj.index is the default RangeIndex. |
| 37 | + """ |
| 38 | + return request.param |
| 39 | + |
11 | 40 | def test_setitem_scalar_series(self, data, box_in_series):
|
12 | 41 | if box_in_series:
|
13 | 42 | data = pd.Series(data)
|
@@ -305,30 +334,20 @@ def test_setitem_preserves_views(self, data):
|
305 | 334 | assert view1[0] == data[1]
|
306 | 335 | assert view2[0] == data[1]
|
307 | 336 |
|
308 |
| - def test_setitem_dataframe_column_with_index(self, data): |
| 337 | + def test_setitem_with_expansion_dataframe_column(self, data, full_indexer): |
309 | 338 | # https://github.com/pandas-dev/pandas/issues/32395
|
310 | 339 | df = expected = pd.DataFrame({"data": pd.Series(data)})
|
311 | 340 | result = pd.DataFrame(index=df.index)
|
312 |
| - result.loc[df.index, "data"] = df["data"] |
313 |
| - self.assert_frame_equal(result, expected) |
314 | 341 |
|
315 |
| - def test_setitem_dataframe_column_without_index(self, data): |
316 |
| - # https://github.com/pandas-dev/pandas/issues/32395 |
317 |
| - df = expected = pd.DataFrame({"data": pd.Series(data)}) |
318 |
| - result = pd.DataFrame(index=df.index) |
319 |
| - result.loc[:, "data"] = df["data"] |
| 342 | + key = full_indexer(df) |
| 343 | + result.loc[key, "data"] = df["data"] |
320 | 344 | self.assert_frame_equal(result, expected)
|
321 | 345 |
|
322 |
| - def test_setitem_series_with_index(self, data): |
| 346 | + def test_setitem_series(self, data, full_indexer): |
323 | 347 | # https://github.com/pandas-dev/pandas/issues/32395
|
324 | 348 | ser = expected = pd.Series(data, name="data")
|
325 | 349 | result = pd.Series(index=ser.index, dtype=object, name="data")
|
326 |
| - result.loc[ser.index] = ser |
327 |
| - self.assert_series_equal(result, expected) |
328 | 350 |
|
329 |
| - def test_setitem_series_without_index(self, data): |
330 |
| - # https://github.com/pandas-dev/pandas/issues/32395 |
331 |
| - ser = expected = pd.Series(data, name="data") |
332 |
| - result = pd.Series(index=ser.index, dtype=object, name="data") |
333 |
| - result.loc[:] = ser |
| 351 | + key = full_indexer(ser) |
| 352 | + result.loc[key] = ser |
334 | 353 | self.assert_series_equal(result, expected)
|
0 commit comments