From 186292d042cbc73eb2e92b1d4272a1d2b712221e Mon Sep 17 00:00:00 2001 From: Albert Villanova del Moral <8515462+albertvillanova@users.noreply.github.com> Date: Wed, 16 Oct 2019 17:30:21 +0200 Subject: [PATCH 1/6] TST: Test key dtype cast after merge Close #17044 --- pandas/tests/reshape/merge/test_merge.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 08698133e360d..05dada55542eb 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -1437,6 +1437,13 @@ def test_merge_on_ints_floats(self, int_vals, float_vals, exp_vals): result = B.merge(A, left_on="Y", right_on="X") assert_frame_equal(result, expected[["Y", "X"]]) + def test_merge_key_dtype_cast(self): + # GH 17044 + df1 = pd.DataFrame({'key':[1., 2.], 'c1':[10, 20]}) + df2 = pd.DataFrame({'key':[2], 'c2':[200]}) + df = df1.merge(df2, on='key', how='left') + assert df['key'].dtype == 'float64' + def test_merge_on_ints_floats_warning(self): # GH 16572 # merge will produce a warning when merging on int and From 6340d5df6f1bbdc865b36d3760bff74a2b5ffe1e Mon Sep 17 00:00:00 2001 From: Albert Villanova del Moral <8515462+albertvillanova@users.noreply.github.com> Date: Wed, 16 Oct 2019 19:08:18 +0200 Subject: [PATCH 2/6] Fix linting --- pandas/tests/reshape/merge/test_merge.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 05dada55542eb..292a3656e0f2b 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -1439,8 +1439,8 @@ def test_merge_on_ints_floats(self, int_vals, float_vals, exp_vals): def test_merge_key_dtype_cast(self): # GH 17044 - df1 = pd.DataFrame({'key':[1., 2.], 'c1':[10, 20]}) - df2 = pd.DataFrame({'key':[2], 'c2':[200]}) + df1 = pd.DataFrame({'key': [1., 2.], 'c1': [10, 20]}) + df2 = pd.DataFrame({'key': [2], 'c2': [200]}) df = df1.merge(df2, on='key', how='left') assert df['key'].dtype == 'float64' From 7edbb2df2a9a732401571fde8cf98fb9b8f0b030 Mon Sep 17 00:00:00 2001 From: Albert Villanova del Moral <8515462+albertvillanova@users.noreply.github.com> Date: Thu, 17 Oct 2019 09:48:04 +0200 Subject: [PATCH 3/6] Use assert_frame_equal --- pandas/tests/reshape/merge/test_merge.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 292a3656e0f2b..edd38160505eb 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -1439,10 +1439,12 @@ def test_merge_on_ints_floats(self, int_vals, float_vals, exp_vals): def test_merge_key_dtype_cast(self): # GH 17044 - df1 = pd.DataFrame({'key': [1., 2.], 'c1': [10, 20]}) - df2 = pd.DataFrame({'key': [2], 'c2': [200]}) - df = df1.merge(df2, on='key', how='left') - assert df['key'].dtype == 'float64' + df1 = DataFrame({'key': [1., 2.], 'c1': [10, 20]}) + df2 = DataFrame({'key': [2], 'c2': [200]}) + result = df1.merge(df2, on='key', how='left') + expected = DataFrame({'key': [1.0, 2.0], 'c1': [10, 20], 'c2': [np.nan, 200.0]}) + # df['key'].dtype == 'float64' + tm.assert_frame_equal(result, expected) def test_merge_on_ints_floats_warning(self): # GH 16572 From a471056aefb2bdc27ed7c3654489c05bed264ced Mon Sep 17 00:00:00 2001 From: Albert Villanova del Moral <8515462+albertvillanova@users.noreply.github.com> Date: Sat, 19 Oct 2019 11:53:43 +0200 Subject: [PATCH 4/6] Remove comment --- pandas/tests/reshape/merge/test_merge.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index edd38160505eb..5a312c7cd9f73 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -1443,7 +1443,6 @@ def test_merge_key_dtype_cast(self): df2 = DataFrame({'key': [2], 'c2': [200]}) result = df1.merge(df2, on='key', how='left') expected = DataFrame({'key': [1.0, 2.0], 'c1': [10, 20], 'c2': [np.nan, 200.0]}) - # df['key'].dtype == 'float64' tm.assert_frame_equal(result, expected) def test_merge_on_ints_floats_warning(self): From 728517be9f20f1d8a42e28dc903bb05c02a61f1b Mon Sep 17 00:00:00 2001 From: Albert Villanova del Moral <8515462+albertvillanova@users.noreply.github.com> Date: Sat, 19 Oct 2019 15:58:57 +0200 Subject: [PATCH 5/6] Specify column order --- pandas/tests/reshape/merge/test_merge.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index 5a312c7cd9f73..d941a6d38c312 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -1439,10 +1439,11 @@ def test_merge_on_ints_floats(self, int_vals, float_vals, exp_vals): def test_merge_key_dtype_cast(self): # GH 17044 - df1 = DataFrame({'key': [1., 2.], 'c1': [10, 20]}) - df2 = DataFrame({'key': [2], 'c2': [200]}) + df1 = DataFrame({'key': [1., 2.], 'v1': [10, 20]}, columns=['key', 'v1']) + df2 = DataFrame({'key': [2], 'v2': [200]}, columns=['key', 'v2']) result = df1.merge(df2, on='key', how='left') - expected = DataFrame({'key': [1.0, 2.0], 'c1': [10, 20], 'c2': [np.nan, 200.0]}) + expected = DataFrame({'key': [1.0, 2.0], 'v1': [10, 20], 'v2': [np.nan, 200.0]}, + columns=['key', 'v1', 'v2']) tm.assert_frame_equal(result, expected) def test_merge_on_ints_floats_warning(self): From 0d6eeef82a757c4bb6507b47e01f40af1d92f592 Mon Sep 17 00:00:00 2001 From: Albert Villanova del Moral <8515462+albertvillanova@users.noreply.github.com> Date: Sun, 20 Oct 2019 10:06:55 +0200 Subject: [PATCH 6/6] Format code according to black --- pandas/tests/reshape/merge/test_merge.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/pandas/tests/reshape/merge/test_merge.py b/pandas/tests/reshape/merge/test_merge.py index d941a6d38c312..19555a0c7e4c3 100644 --- a/pandas/tests/reshape/merge/test_merge.py +++ b/pandas/tests/reshape/merge/test_merge.py @@ -1439,11 +1439,13 @@ def test_merge_on_ints_floats(self, int_vals, float_vals, exp_vals): def test_merge_key_dtype_cast(self): # GH 17044 - df1 = DataFrame({'key': [1., 2.], 'v1': [10, 20]}, columns=['key', 'v1']) - df2 = DataFrame({'key': [2], 'v2': [200]}, columns=['key', 'v2']) - result = df1.merge(df2, on='key', how='left') - expected = DataFrame({'key': [1.0, 2.0], 'v1': [10, 20], 'v2': [np.nan, 200.0]}, - columns=['key', 'v1', 'v2']) + df1 = DataFrame({"key": [1.0, 2.0], "v1": [10, 20]}, columns=["key", "v1"]) + df2 = DataFrame({"key": [2], "v2": [200]}, columns=["key", "v2"]) + result = df1.merge(df2, on="key", how="left") + expected = DataFrame( + {"key": [1.0, 2.0], "v1": [10, 20], "v2": [np.nan, 200.0]}, + columns=["key", "v1", "v2"], + ) tm.assert_frame_equal(result, expected) def test_merge_on_ints_floats_warning(self):