При объединении двух кадров данных 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