From b8e3f92ed0e4db6475eaaf5616c796763e156015 Mon Sep 17 00:00:00 2001 From: Matt Roeschke Date: Wed, 17 Oct 2018 00:01:36 -0700 Subject: [PATCH] CLN: Merge_asof null error message --- pandas/core/reshape/merge.py | 6 ++-- pandas/tests/reshape/merge/test_merge_asof.py | 33 ++++++++----------- 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/pandas/core/reshape/merge.py b/pandas/core/reshape/merge.py index 88b1ec7e47bbb..ed9466795f97f 100644 --- a/pandas/core/reshape/merge.py +++ b/pandas/core/reshape/merge.py @@ -1390,18 +1390,18 @@ def flip(xs): self.right_join_keys[-1]) tolerance = self.tolerance - # we required sortedness and non-missingness in the join keys + # we require sortedness and non-null values in the join keys msg_sorted = "{side} keys must be sorted" msg_missings = "Merge keys contain null values on {side} side" if not Index(left_values).is_monotonic: - if isnull(left_values).sum() > 0: + if isnull(left_values).any(): raise ValueError(msg_missings.format(side='left')) else: raise ValueError(msg_sorted.format(side='left')) if not Index(right_values).is_monotonic: - if isnull(right_values).sum() > 0: + if isnull(right_values).any(): raise ValueError(msg_missings.format(side='right')) else: raise ValueError(msg_sorted.format(side='right')) diff --git a/pandas/tests/reshape/merge/test_merge_asof.py b/pandas/tests/reshape/merge/test_merge_asof.py index ba0cdda61a12c..cf39293f47082 100644 --- a/pandas/tests/reshape/merge/test_merge_asof.py +++ b/pandas/tests/reshape/merge/test_merge_asof.py @@ -1008,24 +1008,19 @@ def test_merge_datatype_error(self): with tm.assert_raises_regex(MergeError, msg): merge_asof(left, right, on='a') - def test_merge_on_nans_int(self): - # 23189 - msg = "Merge keys contain null values on left side" - left = pd.DataFrame({'a': [1.0, 5.0, 10.0, 12.0, np.nan], - 'left_val': ['a', 'b', 'c', 'd', 'e']}) - right = pd.DataFrame({'a': [1.0, 5.0, 10.0, 12.0], - 'right_val': [1, 6, 11, 15]}) - - with tm.assert_raises_regex(ValueError, msg): - merge_asof(left, right, on='a') - - def test_merge_on_nans_datetime(self): - # 23189 - msg = "Merge keys contain null values on right side" - left = pd.DataFrame({"a": pd.date_range('20130101', periods=5)}) - date_vals = pd.date_range('20130102', periods=5)\ - .append(pd.Index([None])) - right = pd.DataFrame({"a": date_vals}) + @pytest.mark.parametrize('func', [lambda x: x, lambda x: to_datetime(x)], + ids=['numeric', 'datetime']) + @pytest.mark.parametrize('side', ['left', 'right']) + def test_merge_on_nans(self, func, side): + # GH 23189 + msg = "Merge keys contain null values on {} side".format(side) + nulls = func([1.0, 5.0, np.nan]) + non_nulls = func([1.0, 5.0, 10.]) + df_null = pd.DataFrame({'a': nulls, 'left_val': ['a', 'b', 'c']}) + df = pd.DataFrame({'a': non_nulls, 'right_val': [1, 6, 11]}) with tm.assert_raises_regex(ValueError, msg): - merge_asof(left, right, on='a') + if side == 'left': + merge_asof(df_null, df, on='a') + else: + merge_asof(df, df_null, on='a')