Почему объединение панд с неправильно отсортированным мультииндексом приводит к переполнению стека? - PullRequest
2 голосов
/ 28 мая 2019

При объединении двух кадров данных pandas с MultiIndex, которые не «в порядке», моя установка pandas приводит к аварийному завершению работы Python с кодом ошибки 0xC00000FD. Мне потребовалось некоторое время, чтобы найти мою ошибку, и когда я нашел ее, я был еще более запутан. Почему это произошло, и как мне лучше обнаружить это?

Рассмотрим следующий код:

import pandas as pd

df = pd.DataFrame.from_records([
    ("foo", 1, .1),
    ("foo", 2, .2),
    ("bar", 1, .3),
    ("bar", 2, .4)
], columns=["Level1", "Level2", "Value"])


df2 = df.set_index(["Level1","Level2"])
df3 = df.set_index(["Level2","Level1"])

combination = pd.merge(left=df2, right=df2, left_index=True, right_index=True)
print("ok")
combination2 = pd.merge(left=df2, right=df3, left_index=True, right_index=True)
print("fail")

Это дает следующий вывод:

  Level1  Level2  Value
0    foo       1    0.1
1    foo       2    0.2
               Value
Level1 Level2       
foo    1         0.1
       2         0.2
               Value
Level2 Level1       
1      foo       0.1
2      foo       0.2
ok
Process finished with exit code -1073741571 (0xC00000FD)

Проблема возникла, когда у меня был стол, я сделал несколько разворотов / плавок и хотел вернуться к исходному мультииндексу и присоединиться к моим результатам. Сначала я не понял сообщение об ошибке. Из этой страницы я узнал, что код ошибки является переполнением стека. От этого пиара к пандам я узнал, что рекурсия так или иначе связана с вычислением групповых индексов. Эта информация позволила мне выследить мою ошибку и создать минимальный пример воспроизведения.

Теперь на мой вопрос:

  • Почему это происходит? Разве Панды не должны давать более информативную ошибку? Моя интуиция говорит, что это должно быть легко обнаружить.
  • Есть ли способ программно идентифицировать эти ошибки вместо того, чтобы оказаться с переполнением стека, неинформативными ошибками и неисправным отладчиком?

РЕДАКТИРОВАТЬ Ошибка, как указано, возникает в последнем питоне и пандах на сегодняшний день, пандах 0.24.2 и питоне 3.7.3

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