Skip to content

Commit 85ec457

Browse files
mroeschkejreback
authored andcommitted
CLN: Merge_asof null error message (#23195)
1 parent d7d0ba2 commit 85ec457

File tree

2 files changed

+17
-22
lines changed

2 files changed

+17
-22
lines changed

pandas/core/reshape/merge.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -1390,18 +1390,18 @@ def flip(xs):
13901390
self.right_join_keys[-1])
13911391
tolerance = self.tolerance
13921392

1393-
# we required sortedness and non-missingness in the join keys
1393+
# we require sortedness and non-null values in the join keys
13941394
msg_sorted = "{side} keys must be sorted"
13951395
msg_missings = "Merge keys contain null values on {side} side"
13961396

13971397
if not Index(left_values).is_monotonic:
1398-
if isnull(left_values).sum() > 0:
1398+
if isnull(left_values).any():
13991399
raise ValueError(msg_missings.format(side='left'))
14001400
else:
14011401
raise ValueError(msg_sorted.format(side='left'))
14021402

14031403
if not Index(right_values).is_monotonic:
1404-
if isnull(right_values).sum() > 0:
1404+
if isnull(right_values).any():
14051405
raise ValueError(msg_missings.format(side='right'))
14061406
else:
14071407
raise ValueError(msg_sorted.format(side='right'))

pandas/tests/reshape/merge/test_merge_asof.py

+14-19
Original file line numberDiff line numberDiff line change
@@ -1008,24 +1008,19 @@ def test_merge_datatype_error(self):
10081008
with tm.assert_raises_regex(MergeError, msg):
10091009
merge_asof(left, right, on='a')
10101010

1011-
def test_merge_on_nans_int(self):
1012-
# 23189
1013-
msg = "Merge keys contain null values on left side"
1014-
left = pd.DataFrame({'a': [1.0, 5.0, 10.0, 12.0, np.nan],
1015-
'left_val': ['a', 'b', 'c', 'd', 'e']})
1016-
right = pd.DataFrame({'a': [1.0, 5.0, 10.0, 12.0],
1017-
'right_val': [1, 6, 11, 15]})
1018-
1019-
with tm.assert_raises_regex(ValueError, msg):
1020-
merge_asof(left, right, on='a')
1021-
1022-
def test_merge_on_nans_datetime(self):
1023-
# 23189
1024-
msg = "Merge keys contain null values on right side"
1025-
left = pd.DataFrame({"a": pd.date_range('20130101', periods=5)})
1026-
date_vals = pd.date_range('20130102', periods=5)\
1027-
.append(pd.Index([None]))
1028-
right = pd.DataFrame({"a": date_vals})
1011+
@pytest.mark.parametrize('func', [lambda x: x, lambda x: to_datetime(x)],
1012+
ids=['numeric', 'datetime'])
1013+
@pytest.mark.parametrize('side', ['left', 'right'])
1014+
def test_merge_on_nans(self, func, side):
1015+
# GH 23189
1016+
msg = "Merge keys contain null values on {} side".format(side)
1017+
nulls = func([1.0, 5.0, np.nan])
1018+
non_nulls = func([1.0, 5.0, 10.])
1019+
df_null = pd.DataFrame({'a': nulls, 'left_val': ['a', 'b', 'c']})
1020+
df = pd.DataFrame({'a': non_nulls, 'right_val': [1, 6, 11]})
10291021

10301022
with tm.assert_raises_regex(ValueError, msg):
1031-
merge_asof(left, right, on='a')
1023+
if side == 'left':
1024+
merge_asof(df_null, df, on='a')
1025+
else:
1026+
merge_asof(df, df_null, on='a')

0 commit comments

Comments
 (0)