From 81c985803154afa2ea63eb056ae5d7d91161ea30 Mon Sep 17 00:00:00 2001 From: Pooja Subramaniam Date: Tue, 10 Jan 2023 19:29:27 +0000 Subject: [PATCH 1/5] added test based on issue #25797 to check if changing dtype of series stays object --- pandas/tests/series/methods/test_replace.py | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/pandas/tests/series/methods/test_replace.py b/pandas/tests/series/methods/test_replace.py index 18ad275083022..5d7f34f89992a 100644 --- a/pandas/tests/series/methods/test_replace.py +++ b/pandas/tests/series/methods/test_replace.py @@ -675,3 +675,26 @@ def test_replace_value_none_dtype_numeric(self, val): result = ser.replace(val, None) expected = pd.Series([1, None], dtype=object) tm.assert_series_equal(result, expected) + + def test_replace_change_dtype_series(self): + # GH#25797 + df = pd.DataFrame.from_dict({'Test': ['0.5', True, '0.6']}) + print(df['Test'].dtype) + assert df['Test'].dtype == 'object' + df['Test'] = df['Test'].replace([True], [np.nan]) + print(df['Test'].dtype) + assert df['Test'].dtype == 'object' + + df = pd.DataFrame.from_dict({'Test': ['0.5', None, '0.6']}) + print(df['Test'].dtype) + assert df['Test'].dtype == 'object' + df['Test'] = df['Test'].replace([None], [np.nan]) + print(df['Test'].dtype) + assert df['Test'].dtype == 'object' + + df = pd.DataFrame.from_dict({'Test': ['0.5', None, '0.6']}) + print(df['Test'].dtype) + assert df['Test'].dtype == 'object' + df['Test'] = df['Test'].fillna(np.nan) + print(df['Test'].dtype) + assert df['Test'].dtype == 'object' \ No newline at end of file From 83d98014cd9b50283cc2ac28b9af941f14e62f96 Mon Sep 17 00:00:00 2001 From: Pooja Subramaniam Date: Wed, 11 Jan 2023 14:16:56 +0100 Subject: [PATCH 2/5] changed single quotes to double and added new line at the end --- pandas/tests/series/methods/test_replace.py | 40 ++++++++++----------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/pandas/tests/series/methods/test_replace.py b/pandas/tests/series/methods/test_replace.py index 5d7f34f89992a..ad29e6feb31ea 100644 --- a/pandas/tests/series/methods/test_replace.py +++ b/pandas/tests/series/methods/test_replace.py @@ -678,23 +678,23 @@ def test_replace_value_none_dtype_numeric(self, val): def test_replace_change_dtype_series(self): # GH#25797 - df = pd.DataFrame.from_dict({'Test': ['0.5', True, '0.6']}) - print(df['Test'].dtype) - assert df['Test'].dtype == 'object' - df['Test'] = df['Test'].replace([True], [np.nan]) - print(df['Test'].dtype) - assert df['Test'].dtype == 'object' - - df = pd.DataFrame.from_dict({'Test': ['0.5', None, '0.6']}) - print(df['Test'].dtype) - assert df['Test'].dtype == 'object' - df['Test'] = df['Test'].replace([None], [np.nan]) - print(df['Test'].dtype) - assert df['Test'].dtype == 'object' - - df = pd.DataFrame.from_dict({'Test': ['0.5', None, '0.6']}) - print(df['Test'].dtype) - assert df['Test'].dtype == 'object' - df['Test'] = df['Test'].fillna(np.nan) - print(df['Test'].dtype) - assert df['Test'].dtype == 'object' \ No newline at end of file + df = pd.DataFrame.from_dict({"Test": ["0.5", True, "0.6"]}) + print(df["Test"].dtype) + assert df["Test"].dtype == "object" + df["Test"] = df["Test"].replace([True], [np.nan]) + print(df["Test"].dtype) + assert df["Test"].dtype == "object" + + df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) + print(df["Test"].dtype) + assert df["Test"].dtype == "object" + df["Test"] = df["Test"].replace([None], [np.nan]) + print(df["Test"].dtype) + assert df["Test"].dtype == "object" + + df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) + print(df["Test"].dtype) + assert df["Test"].dtype == "object" + df["Test"] = df["Test"].fillna(np.nan) + print(df["Test"].dtype) + assert df["Test"].dtype == "object" From fe3e4545eb9bc32151db766d38706e86dda25fb0 Mon Sep 17 00:00:00 2001 From: Pooja Subramaniam Date: Wed, 11 Jan 2023 17:47:32 +0100 Subject: [PATCH 3/5] remove print statements and unnecessary assert, and use expected result format for assert --- pandas/tests/series/methods/test_replace.py | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/pandas/tests/series/methods/test_replace.py b/pandas/tests/series/methods/test_replace.py index ad29e6feb31ea..daa5a15566b45 100644 --- a/pandas/tests/series/methods/test_replace.py +++ b/pandas/tests/series/methods/test_replace.py @@ -679,22 +679,19 @@ def test_replace_value_none_dtype_numeric(self, val): def test_replace_change_dtype_series(self): # GH#25797 df = pd.DataFrame.from_dict({"Test": ["0.5", True, "0.6"]}) - print(df["Test"].dtype) - assert df["Test"].dtype == "object" + expected = df["Test"].dtype df["Test"] = df["Test"].replace([True], [np.nan]) - print(df["Test"].dtype) - assert df["Test"].dtype == "object" + result = df["Test"].dtype + assert result == expected df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) - print(df["Test"].dtype) - assert df["Test"].dtype == "object" + expected = df["Test"].dtype df["Test"] = df["Test"].replace([None], [np.nan]) - print(df["Test"].dtype) - assert df["Test"].dtype == "object" + result = df["Test"].dtype + assert result == expected df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) - print(df["Test"].dtype) - assert df["Test"].dtype == "object" + expected = df["Test"].dtype df["Test"] = df["Test"].fillna(np.nan) - print(df["Test"].dtype) - assert df["Test"].dtype == "object" + result = df["Test"].dtype + assert result == expected From ca92c7707d80be6dab456d37c787fad7400b66a0 Mon Sep 17 00:00:00 2001 From: Pooja Subramaniam Date: Wed, 11 Jan 2023 18:06:58 +0100 Subject: [PATCH 4/5] change assert statements to compare dataframes rather than only dtype --- pandas/tests/series/methods/test_replace.py | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/pandas/tests/series/methods/test_replace.py b/pandas/tests/series/methods/test_replace.py index daa5a15566b45..ca56cf10dd732 100644 --- a/pandas/tests/series/methods/test_replace.py +++ b/pandas/tests/series/methods/test_replace.py @@ -679,19 +679,16 @@ def test_replace_value_none_dtype_numeric(self, val): def test_replace_change_dtype_series(self): # GH#25797 df = pd.DataFrame.from_dict({"Test": ["0.5", True, "0.6"]}) - expected = df["Test"].dtype df["Test"] = df["Test"].replace([True], [np.nan]) - result = df["Test"].dtype - assert result == expected + expected = pd.DataFrame.from_dict({"Test": ["0.5", np.nan, "0.6"]}) + tm.assert_frame_equal(df, expected) df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) - expected = df["Test"].dtype df["Test"] = df["Test"].replace([None], [np.nan]) - result = df["Test"].dtype - assert result == expected + expected = pd.DataFrame.from_dict({"Test": ["0.5", np.nan, "0.6"]}) + tm.assert_frame_equal(df, expected) df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) - expected = df["Test"].dtype df["Test"] = df["Test"].fillna(np.nan) - result = df["Test"].dtype - assert result == expected + expected = pd.DataFrame.from_dict({"Test": ["0.5", np.nan, "0.6"]}) + tm.assert_frame_equal(df, expected) From 250c044e520c23f8c5b4d1395632397a2733a081 Mon Sep 17 00:00:00 2001 From: Pooja Subramaniam Date: Thu, 12 Jan 2023 08:15:28 +0100 Subject: [PATCH 5/5] remove redundant expected assignment statements --- pandas/tests/series/methods/test_replace.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/pandas/tests/series/methods/test_replace.py b/pandas/tests/series/methods/test_replace.py index ca56cf10dd732..1188c9452520c 100644 --- a/pandas/tests/series/methods/test_replace.py +++ b/pandas/tests/series/methods/test_replace.py @@ -685,10 +685,8 @@ def test_replace_change_dtype_series(self): df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) df["Test"] = df["Test"].replace([None], [np.nan]) - expected = pd.DataFrame.from_dict({"Test": ["0.5", np.nan, "0.6"]}) tm.assert_frame_equal(df, expected) df = pd.DataFrame.from_dict({"Test": ["0.5", None, "0.6"]}) df["Test"] = df["Test"].fillna(np.nan) - expected = pd.DataFrame.from_dict({"Test": ["0.5", np.nan, "0.6"]}) tm.assert_frame_equal(df, expected)