Как использовать MergeError в операторе try-Кроме? - PullRequest
0 голосов
/ 29 декабря 2018

Я создавал программу для объединения таблиц 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

Ответы [ 2 ]

0 голосов
/ 29 декабря 2018

Используйте это:

except pd.errors.MergeError as e:

Или, альтернативно, импортируйте имя сверху:

from pd.errors import MergeError
0 голосов
/ 29 декабря 2018

Вам нужно импортировать MergeError из содержащего его модуля, прежде чем вы сможете поймать его по имени.

from pandas.errors import MergeError
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...