diff --git a/pandas/core/reshape/merge.py b/pandas/core/reshape/merge.py index e409090e76944b..504dd159782d8b 100644 --- a/pandas/core/reshape/merge.py +++ b/pandas/core/reshape/merge.py @@ -1514,6 +1514,7 @@ def _sort_labels(uniques, left, right): def _get_join_keys(llab, rlab, shape, sort): + np.seterr(divide='ignore') # how many levels can be done without overflow pred = lambda i: not is_int64_overflow_possible(shape[:i]) @@ -1525,9 +1526,11 @@ def _get_join_keys(llab, rlab, shape, sort): rkey = stride * rlab[0].astype('i8', subok=False, copy=False) for i in range(1, nlev): - stride //= shape[i] + with np.errstate(divide='ignore'): + stride //= shape[i] lkey += llab[i] * stride rkey += rlab[i] * stride + np.seterr(divide='warn') if nlev == len(shape): # all done! return lkey, rkey diff --git a/pandas/tests/reshape/test_merge.py b/pandas/tests/reshape/test_merge.py index ed99814afd20a9..1c0cd2d537b3fe 100644 --- a/pandas/tests/reshape/test_merge.py +++ b/pandas/tests/reshape/test_merge.py @@ -861,6 +861,14 @@ def test_validation(self): result = merge(left, right, on=['a', 'b'], validate='1:1') assert_frame_equal(result, expected_multi) + def test_merge_two_empty_df_no_division_error(self): + # GH17776, PR #17846 + import warnings + a = pd.DataFrame({'a': [], 'b': [], 'c': []}) + with warnings.catch_warnings(record=True) as record: + merge(a, a, on=('a', 'b')) + assert len(record) == 0 + def _check_merge(x, y): for how in ['inner', 'left', 'outer']: