После удаления строки выдает KeyError. Pandas

Скрипт ищет в Excel файле совпадения с шаблонами, добавляет их в словарь, удаляет из исходного датафрейма. Шаблоны в словаре как ключи. Пробовал реиндексировать, игрался с счетчиком. Ошибку выкидывает после удаления 605 строки, при поиске следующего совпадения. Почему выкидывает эту ошибку, если where.head(605) спокойно выполняется.

def find(pattern, where):
    i = 0
    while i in range(len(where)):
        match = re.match(pattern, where[i])
        if match is not None:
            test_dict[pattern].append(where[i])
            where.drop(index=[i], axis=0, inplace=True)
        i += 1
    return where


for key in test_dict.keys():
    searching = find(key, searching)

Ответы (1 шт):

Автор решения: CrazyElf

Так лучше не делать ни в просто питоне со списками, ни в пандасе с датафреймами. Вы на ходу удаляете элементы из датафрейма, по которому итерируетесь, рано или поздно это приведёт к ошибкам, даже просто потому, что элементов в датафрейме после этого станет меньше, чем было когда вы инициализировали range.

Починить по идее просто должно быть - собирайте индексы, которые вы хотели бы удалить, в отдельный список. А удаление произведите после того, как цикл закончится. Сразу по списку - там же drop не зря требует именно список.

→ Ссылка