|
2 | 2 | # pylint: disable-msg=E1101,W0612
|
3 | 3 |
|
4 | 4 | from datetime import datetime, timedelta
|
| 5 | +import pytest |
5 | 6 |
|
6 | 7 | from numpy import nan
|
7 | 8 | import numpy as np
|
@@ -275,6 +276,44 @@ def test_getitem_generator(self):
|
275 | 276 | assert_series_equal(result, expected)
|
276 | 277 | assert_series_equal(result2, expected)
|
277 | 278 |
|
| 279 | + def test_setitem_generator(self): |
| 280 | + bool_idx = self.series > 0 |
| 281 | + idces = self.series[bool_idx].index |
| 282 | + |
| 283 | + values = range(bool_idx.sum()) |
| 284 | + |
| 285 | + expected = self.series.copy() |
| 286 | + expected[bool_idx] = values |
| 287 | + |
| 288 | + # list of labels: |
| 289 | + s1 = self.series.copy() |
| 290 | + s1[iter(idces)] = values |
| 291 | + assert_series_equal(s1, expected) |
| 292 | + |
| 293 | + # list of labels with .loc: |
| 294 | + s2 = self.series.copy() |
| 295 | + s2.loc[iter(idces)] = values |
| 296 | + assert_series_equal(s2, expected) |
| 297 | + |
| 298 | + @pytest.mark.xfail(reason="Setitem with booleans generators unsupported") |
| 299 | + def test_setitem_boolean_generator(self): |
| 300 | + bool_idx = self.series > 0 |
| 301 | + |
| 302 | + values = range(bool_idx.sum()) |
| 303 | + |
| 304 | + expected = self.series.copy() |
| 305 | + expected[bool_idx] = values |
| 306 | + |
| 307 | + # boolean generator (fails) |
| 308 | + s1 = self.series.copy() |
| 309 | + s1[iter(bool_idx)] = values |
| 310 | + assert_series_equal(s1, expected) |
| 311 | + |
| 312 | + # boolean generator with .loc (fails) |
| 313 | + s2 = self.series.copy() |
| 314 | + s2.loc[iter(bool_idx)] = values |
| 315 | + assert_series_equal(s2, expected) |
| 316 | + |
278 | 317 | def test_type_promotion(self):
|
279 | 318 | # GH12599
|
280 | 319 | s = pd.Series()
|
|
0 commit comments