Я создавал программу для объединения таблиц 1-1 и хотел использовать concat с помощью оператора try-кроме, если validate = 'one-to-one' не работает.
Однако мне не удалось использовать MergeError в «кроме MergeError as e:» code.
Поскольку реальный код, который я пишу, слишком длинный, я сделал простой пример своей проблемы.В приведенном ниже коде, если я использую
result = pd.merge (left, right, on = 'B', how = 'external', validate = "one_to_one")
, этовозвращает мне MergeError.
Но для кода, исключающего попытку, он не обрабатывает случай MergeError.Он возвращает мне еще одну ошибку, названную NameError.
Есть ли способ обработки с помощью MergeError?
import pandas as pd
left = pd.DataFrame({'A' : [1,2], 'B' : [1, 2]})
right = pd.DataFrame({'A' : [4,5,6], 'B': [2, 2, 2]})
try:
result = pd.merge(left, right, on='B', how='outer', validate="one_to_one")
except MergeError as e:
print("ok ",e)
MergeError Traceback (most recent call last)
<ipython-input-1-2a4c90911337> in <module>()
6 try:
----> 7 result = pd.merge(left, right, on='B', how='outer',
validate="one_to_one")
8 except MergeError as e:
~\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in merge(left,
right, how, on, left_on, right_on, left_index, right_index, sort, suffixes,
copy, indicator, validate)
59 copy=copy, indicator=indicator,
---> 60 validate=validate)
61 return op.get_result()
~\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in
__init__(self, left, right, how, on, left_on, right_on, axis, left_index,
right_index, sort, suffixes, copy, indicator, validate)
559 if validate is not None:
--> 560 self._validate(validate)
561
~\Anaconda3\lib\site-packages\pandas\core\reshape\merge.py in
_validate(self, validate)
1079 elif not right_unique:
-> 1080 raise MergeError("Merge keys are not unique in
right dataset;"
1081 " not a one-to-one merge")
MergeError: Merge keys are not unique in right dataset; not a one-to-one
merge
During handling of the above exception, another exception occurred:
NameError Traceback (most recent call last)
<ipython-input-1-2a4c90911337> in <module>()
6 try:
7 result = pd.merge(left, right, on='B', how='outer', validate="one_to_one")
----> 8 except MergeError as e:
9 print("ok ",e)
NameError: name 'MergeError' is not defined