@@ -334,7 +334,6 @@ def test_regex_replace_str_to_numeric(self, mix_abc):
334
334
return_value = res3 .replace (regex = r"\s*\.\s*" , value = 0 , inplace = True )
335
335
assert return_value is None
336
336
expec = DataFrame ({"a" : mix_abc ["a" ], "b" : ["a" , "b" , 0 , 0 ], "c" : mix_abc ["c" ]})
337
- # TODO(infer_string)
338
337
expec ["c" ] = expec ["c" ].astype (object )
339
338
tm .assert_frame_equal (res , expec )
340
339
tm .assert_frame_equal (res2 , expec )
@@ -1476,21 +1475,24 @@ def test_regex_replace_scalar(
1476
1475
tm .assert_frame_equal (result , expected )
1477
1476
1478
1477
@pytest .mark .parametrize ("regex" , [False , True ])
1479
- def test_replace_regex_dtype_frame (self , regex ):
1478
+ @pytest .mark .parametrize ("value" , [1 , "1" ])
1479
+ def test_replace_regex_dtype_frame (self , regex , value ):
1480
1480
# GH-48644
1481
1481
df1 = DataFrame ({"A" : ["0" ], "B" : ["0" ]})
1482
- expected_df1 = DataFrame ({"A" : [1 ], "B" : [1 ]}, dtype = object )
1483
- result_df1 = df1 .replace (to_replace = "0" , value = 1 , regex = regex )
1482
+ # When value is an integer, coerce result to object.
1483
+ # When value is a string, infer the correct string dtype.
1484
+ dtype = object if value == 1 else None
1485
+
1486
+ expected_df1 = DataFrame ({"A" : [value ], "B" : [value ]}, dtype = dtype )
1487
+ result_df1 = df1 .replace (to_replace = "0" , value = value , regex = regex )
1484
1488
tm .assert_frame_equal (result_df1 , expected_df1 )
1485
1489
1486
1490
df2 = DataFrame ({"A" : ["0" ], "B" : ["1" ]})
1487
1491
if regex :
1488
- # TODO(infer_string): both string columns get cast to object,
1489
- # while only needed for column A
1490
- expected_df2 = DataFrame ({"A" : [1 ], "B" : ["1" ]}, dtype = object )
1492
+ expected_df2 = DataFrame ({"A" : [value ], "B" : ["1" ]}, dtype = dtype )
1491
1493
else :
1492
- expected_df2 = DataFrame ({"A" : Series ([1 ], dtype = object ), "B" : ["1" ]})
1493
- result_df2 = df2 .replace (to_replace = "0" , value = 1 , regex = regex )
1494
+ expected_df2 = DataFrame ({"A" : Series ([value ], dtype = dtype ), "B" : ["1" ]})
1495
+ result_df2 = df2 .replace (to_replace = "0" , value = value , regex = regex )
1494
1496
tm .assert_frame_equal (result_df2 , expected_df2 )
1495
1497
1496
1498
def test_replace_with_value_also_being_replaced (self ):
0 commit comments