@@ -273,16 +273,21 @@ def test_groupby_example(self):
273
273
new_vals = np .arange (df2 .shape [0 ])
274
274
df .loc [name , "new_col" ] = new_vals
275
275
276
- def test_series_setitem (self , multiindex_year_month_day_dataframe_random_data ):
276
+ def test_series_setitem (
277
+ self , multiindex_year_month_day_dataframe_random_data , warn_copy_on_write
278
+ ):
277
279
ymd = multiindex_year_month_day_dataframe_random_data
278
280
s = ymd ["A" ]
279
281
280
- s [2000 , 3 ] = np .nan
282
+ warn = FutureWarning if warn_copy_on_write else None
283
+ with tm .assert_produces_warning (warn , match = "Setting value on view" ):
284
+ s [2000 , 3 ] = np .nan
281
285
assert isna (s .values [42 :65 ]).all ()
282
286
assert notna (s .values [:42 ]).all ()
283
287
assert notna (s .values [65 :]).all ()
284
288
285
- s [2000 , 3 , 10 ] = np .nan
289
+ with tm .assert_produces_warning (warn , match = "Setting value on view" ):
290
+ s [2000 , 3 , 10 ] = np .nan
286
291
assert isna (s .iloc [49 ])
287
292
288
293
with pytest .raises (KeyError , match = "49" ):
@@ -527,28 +532,34 @@ def test_frame_setitem_view_direct(
527
532
528
533
529
534
def test_frame_setitem_copy_raises (
530
- multiindex_dataframe_random_data , using_copy_on_write
535
+ multiindex_dataframe_random_data , using_copy_on_write , warn_copy_on_write
531
536
):
532
537
# will raise/warn as its chained assignment
533
538
df = multiindex_dataframe_random_data .T
534
539
if using_copy_on_write :
535
540
with tm .raises_chained_assignment_error ():
536
541
df ["foo" ]["one" ] = 2
542
+ elif warn_copy_on_write :
543
+ with tm .assert_produces_warning (FutureWarning , match = "ChainedAssignmentError" ):
544
+ df ["foo" ]["one" ] = 2
537
545
else :
538
546
msg = "A value is trying to be set on a copy of a slice from a DataFrame"
539
547
with pytest .raises (SettingWithCopyError , match = msg ):
540
548
df ["foo" ]["one" ] = 2
541
549
542
550
543
551
def test_frame_setitem_copy_no_write (
544
- multiindex_dataframe_random_data , using_copy_on_write
552
+ multiindex_dataframe_random_data , using_copy_on_write , warn_copy_on_write
545
553
):
546
554
frame = multiindex_dataframe_random_data .T
547
555
expected = frame
548
556
df = frame .copy ()
549
557
if using_copy_on_write :
550
558
with tm .raises_chained_assignment_error ():
551
559
df ["foo" ]["one" ] = 2
560
+ elif warn_copy_on_write :
561
+ with tm .assert_produces_warning (FutureWarning , match = "ChainedAssignmentError" ):
562
+ df ["foo" ]["one" ] = 2
552
563
else :
553
564
msg = "A value is trying to be set on a copy of a slice from a DataFrame"
554
565
with pytest .raises (SettingWithCopyError , match = msg ):
0 commit comments