|
9 | 9 |
|
10 | 10 |
|
11 | 11 | class TestSeriesReplace:
|
| 12 | + def test_replace_explicit_none(self): |
| 13 | + # GH#36984 if the user explicitly passes value=None, give it to them |
| 14 | + ser = pd.Series([0, 0, ""], dtype=object) |
| 15 | + result = ser.replace("", None) |
| 16 | + expected = pd.Series([0, 0, None], dtype=object) |
| 17 | + tm.assert_series_equal(result, expected) |
| 18 | + |
| 19 | + df = pd.DataFrame(np.zeros((3, 3))) |
| 20 | + df.iloc[2, 2] = "" |
| 21 | + result = df.replace("", None) |
| 22 | + expected = pd.DataFrame( |
| 23 | + { |
| 24 | + 0: np.zeros(3), |
| 25 | + 1: np.zeros(3), |
| 26 | + 2: np.array([0.0, 0.0, None], dtype=object), |
| 27 | + } |
| 28 | + ) |
| 29 | + assert expected.iloc[2, 2] is None |
| 30 | + tm.assert_frame_equal(result, expected) |
| 31 | + |
| 32 | + # GH#19998 same thing with object dtype |
| 33 | + ser = pd.Series([10, 20, 30, "a", "a", "b", "a"]) |
| 34 | + result = ser.replace("a", None) |
| 35 | + expected = pd.Series([10, 20, 30, None, None, "b", None]) |
| 36 | + assert expected.iloc[-1] is None |
| 37 | + tm.assert_series_equal(result, expected) |
| 38 | + |
| 39 | + def test_replace_noop_doesnt_downcast(self): |
| 40 | + # GH#44498 |
| 41 | + ser = pd.Series([None, None, pd.Timestamp("2021-12-16 17:31")], dtype=object) |
| 42 | + res = ser.replace({np.nan: None}) # should be a no-op |
| 43 | + tm.assert_series_equal(res, ser) |
| 44 | + assert res.dtype == object |
| 45 | + |
| 46 | + # same thing but different calling convention |
| 47 | + res = ser.replace(np.nan, None) |
| 48 | + tm.assert_series_equal(res, ser) |
| 49 | + assert res.dtype == object |
| 50 | + |
12 | 51 | def test_replace(self):
|
13 | 52 | N = 100
|
14 | 53 | ser = pd.Series(np.random.randn(N))
|
|
0 commit comments