Почему я получаю ошибку ключа в диапазоне цикла? - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь удалить все строки во фрейме данных Pandas, у которых нет нуля ни в одном из двух столбцов.Мой фрейм данных проиндексирован от 0 до 620. Это мой код:

for index in range(0, 621):
    if((zeroes[index,1] != 0) and (zeroes[index,3] != 0)):
        del(zeroes[index,])

Я получаю ошибку ключа.KeyError: (0, 1)

Мой инструктор предложил изменить диапазон, чтобы проверить, нет ли в моем фрейме данных плохих линий.Я сделал.Я проверил хвост моего фрейма данных и затем изменил диапазон на (616, 621).Тогда я получил ключевую ошибку: (616, 1).

Кто-нибудь знает, что не так с моим кодом или почему я получаю ошибку ключа?

Этот код также вызывает ошибку ключа (0,1):

index = 0
while (index < 621):
    if((zeroes[index,1] != 0) and (zeroes[index,3] != 0)):
        del(zeroes[index,])
index = index + 1

1 Ответ

0 голосов
/ 12 октября 2018

Не используйте ручную for петлю здесь.Вероятно, ваша ошибка возникает из-за того, что df.__getitem__((x, y)), что фактически означает то, что вызывает df[x, y], не имеет значения.

Вместо этого используйте векторизованные операции и логическое индексирование.Например, чтобы удалить строки, в которых столбцы 1 или 3 не равны 0:

df = df[df.iloc[:, [1, 3]].eq(0).any(1)]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...