Skip to content

Commit 1d3f5b9

Browse files
manrajgroverTomAugspurger
authored andcommitted
Fix 18068: Updates merge_asof error, now outputs datatypes (#18082)
(cherry picked from commit 86e9dcc)
1 parent 5a006d3 commit 1d3f5b9

File tree

3 files changed

+18
-4
lines changed

3 files changed

+18
-4
lines changed

doc/source/whatsnew/v0.21.1.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ Sparse
103103
Reshaping
104104
^^^^^^^^^
105105

106-
-
106+
- Error message in ``pd.merge_asof()`` for key datatype mismatch now includes datatype of left and right key (:issue:`18068`)
107107
-
108108
-
109109

pandas/core/reshape/merge.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -1253,10 +1253,12 @@ def _get_merge_keys(self):
12531253
join_names) = super(_AsOfMerge, self)._get_merge_keys()
12541254

12551255
# validate index types are the same
1256-
for lk, rk in zip(left_join_keys, right_join_keys):
1256+
for i, (lk, rk) in enumerate(zip(left_join_keys, right_join_keys)):
12571257
if not is_dtype_equal(lk.dtype, rk.dtype):
1258-
raise MergeError("incompatible merge keys, "
1259-
"must be the same type")
1258+
raise MergeError("incompatible merge keys [{i}] {lkdtype} and "
1259+
"{rkdtype}, must be the same type"
1260+
.format(i=i, lkdtype=lk.dtype,
1261+
rkdtype=rk.dtype))
12601262

12611263
# validate tolerance; must be a Timedelta if we have a DTI
12621264
if self.tolerance is not None:

pandas/tests/reshape/test_merge_asof.py

+12
Original file line numberDiff line numberDiff line change
@@ -973,3 +973,15 @@ def test_on_float_by_int(self):
973973
columns=['symbol', 'exch', 'price', 'mpv'])
974974

975975
assert_frame_equal(result, expected)
976+
977+
def test_merge_datatype_error(self):
978+
""" Tests merge datatype mismatch error """
979+
msg = 'merge keys \[0\] object and int64, must be the same type'
980+
981+
left = pd.DataFrame({'left_val': [1, 5, 10],
982+
'a': ['a', 'b', 'c']})
983+
right = pd.DataFrame({'right_val': [1, 2, 3, 6, 7],
984+
'a': [1, 2, 3, 6, 7]})
985+
986+
with tm.assert_raises_regex(MergeError, msg):
987+
merge_asof(left, right, on='a')

0 commit comments

Comments
 (0)