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

Итак, у меня есть padas dataframe, и я использую iterrows () для итерации по каждой строке, чтобы сделать с ней несколько сложных вещей. Часть этого включает в себя вычитание координат строки текущего из координат строки следующего, поэтому я делаю

sqrt(((row[5] - df.iloc[index+1, 5])**2) + ((row[4] - df.iloc[index+1, 4])**2)) < .1

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

Edit:

for index, row in df.iterrows():
    if row[8] < 10 and sqrt(((row[5] - df.iloc[index+1, 5])**2) + ((row[4] - df.iloc[index+1, 4])**2)) < .1
        #do stuff

1 Ответ

0 голосов
/ 03 июля 2018

когда строка является последней строкой, ваш код пытался получить доступ к (строка + 1), которой нет, поэтому вы получаете ошибку индексации.

запустить цикл для перебора всех строк, кроме последней, затем, когда ваш код достигнет второй последней строки, он получит доступ к последней строке.

попробуйте этот код

for i in range(len(df.index)-1):           #runs from row 0 to n-2 rows if total rows are n
    # your code
    sqrt(((row[5] - df.iloc[index+1, 5])**2) + ((row[4] - df.iloc[index+1, 4])**2)) < .1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...