Skip to content

Commit 8dba88f

Browse files
author
Nick Eubank
committed
change merge validate errors to MergeError from ValueError, move MergeError to pandas/errors
1 parent 49ec31b commit 8dba88f

File tree

5 files changed

+21
-17
lines changed

5 files changed

+21
-17
lines changed

doc/source/whatsnew/v0.21.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ Backwards incompatible API changes
5151
Other API Changes
5252
^^^^^^^^^^^^^^^^^
5353

54+
- Moved definition of ``MergeError`` to ``pandas/errors/__init__.py``.
5455

5556

5657
.. _whatsnew_0210.deprecations:

pandas/core/reshape/merge.py

+6-9
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import pandas.core.algorithms as algos
4141
import pandas.core.common as com
4242
from pandas._libs import hashtable as libhashtable, join as libjoin, lib
43+
from pandas.errors import MergeError
4344

4445

4546
@Substitution('\nleft : DataFrame')
@@ -60,10 +61,6 @@ def merge(left, right, how='inner', on=None, left_on=None, right_on=None,
6061
merge.__doc__ = _merge_doc % '\nleft : DataFrame'
6162

6263

63-
class MergeError(ValueError):
64-
pass
65-
66-
6764
def _groupby_and_merge(by, on, left, right, _merge_pieces,
6865
check_duplicates=True):
6966
"""
@@ -986,23 +983,23 @@ def _validate(self, validate):
986983
# Check data integrity
987984
if validate in ["one_to_one", "1:1"]:
988985
if not left_unique and not right_unique:
989-
raise ValueError("Merge keys are not unique in either left"
986+
raise MergeError("Merge keys are not unique in either left"
990987
" or right dataset; not a one-to-one merge")
991988
elif not left_unique:
992-
raise ValueError("Merge keys are not unique in left dataset;"
989+
raise MergeError("Merge keys are not unique in left dataset;"
993990
" not a one-to-one merge")
994991
elif not right_unique:
995-
raise ValueError("Merge keys are not unique in right dataset;"
992+
raise MergeError("Merge keys are not unique in right dataset;"
996993
" not a one-to-one merge")
997994

998995
elif validate in ["one_to_many", "1:m"]:
999996
if not left_unique:
1000-
raise ValueError("Merge keys are not unique in left dataset;"
997+
raise MergeError("Merge keys are not unique in left dataset;"
1001998
"not a one-to-many merge")
1002999

10031000
elif validate in ["many_to_one", "m:1"]:
10041001
if not right_unique:
1005-
raise ValueError("Merge keys are not unique in right dataset;"
1002+
raise MergeError("Merge keys are not unique in right dataset;"
10061003
" not a many-to-one merge")
10071004

10081005
elif validate in ['many_to_many', 'm:m']:

pandas/errors/__init__.py

+6
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,9 @@ class ParserWarning(Warning):
5757
"""
5858

5959

60+
class MergeError(ValueError):
61+
"""
62+
Error raised when problems arise during merging due to problems
63+
with input data. Subclass of `ValueError`.
64+
65+
"""

pandas/tests/reshape/test_merge.py

+7-7
Original file line numberDiff line numberDiff line change
@@ -789,11 +789,11 @@ def test_validation(self):
789789
merge(left, right_w_dups, left_index=True, right_index=True,
790790
validate='one_to_many')
791791

792-
with pytest.raises(ValueError):
792+
with pytest.raises(MergeError):
793793
merge(left, right_w_dups, left_index=True, right_index=True,
794794
validate='one_to_one')
795795

796-
with pytest.raises(ValueError):
796+
with pytest.raises(MergeError):
797797
merge(left, right_w_dups, on='a', validate='one_to_one')
798798

799799
# Dups on left
@@ -802,21 +802,21 @@ def test_validation(self):
802802
merge(left_w_dups, right, left_index=True, right_index=True,
803803
validate='many_to_one')
804804

805-
with pytest.raises(ValueError):
805+
with pytest.raises(MergeError):
806806
merge(left_w_dups, right, left_index=True, right_index=True,
807807
validate='one_to_one')
808808

809-
with pytest.raises(ValueError):
809+
with pytest.raises(MergeError):
810810
merge(left_w_dups, right, on='a', validate='one_to_one')
811811

812812
# Dups on both
813813
merge(left_w_dups, right_w_dups, on='a', validate='many_to_many')
814814

815-
with pytest.raises(ValueError):
815+
with pytest.raises(MergeError):
816816
merge(left_w_dups, right_w_dups, left_index=True,
817817
right_index=True, validate='many_to_one')
818818

819-
with pytest.raises(ValueError):
819+
with pytest.raises(MergeError):
820820
merge(left_w_dups, right_w_dups, on='a',
821821
validate='one_to_many')
822822

@@ -842,7 +842,7 @@ def test_validation(self):
842842
'um... weasel noise?']},
843843
index=range(3))
844844

845-
with pytest.raises(ValueError):
845+
with pytest.raises(MergeError):
846846
merge(left, right, on='a', validate='1:1')
847847

848848
result = merge(left, right, on=['a', 'b'], validate='1:1')

pandas/tests/test_errors.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"exc", ['UnsupportedFunctionCall', 'UnsortedIndexError',
1111
'OutOfBoundsDatetime',
1212
'ParserError', 'PerformanceWarning', 'DtypeWarning',
13-
'EmptyDataError', 'ParserWarning'])
13+
'EmptyDataError', 'ParserWarning', 'MergeError'])
1414
def test_exception_importable(exc):
1515
from pandas import errors
1616
e = getattr(errors, exc)

0 commit comments

Comments
 (0)