У меня странная проблема с pandas. После некоторой тщательной отладки я обнаружил проблему, но мне хотелось бы исправить ее и объяснить, почему это происходит.
У меня есть датафрейм, который состоит из списка городов с некоторыми расстояниями. Мне нужно итеративно находить город, который ближе всего расположен к какому-то «семенному» городу (здесь детали не слишком важны).
Чтобы найти «ближайший» город к моему начальному городу, я использую:
id_new_point = df["Time from seed"].idxmin(skipna=True)
Затем я хочу удалить только что найденный город из кадра данных, для которого я использую:
df.drop(index=emte_df.index[id_new_point], inplace=True)
Теперь начинается странная часть; Я подключил отладчик pycharm и внимательно наблюдал за моим фреймом данных, проходя через циклы.
Когда вы удаляете строку в pandas с помощью df.drop
, кажется, удаляется вся строка по номеру строки . Например, это означает, что если я удаляю строку № 126, «столбец индекса» информационного кадра не адаптируется соответствующим образом. (См. Скриншот ниже)
![enter image description here](https://i.stack.imgur.com/7X8x3.png)
idxmin
, кажется, возвращает фактический индекс строки, поэтому индекс, связанный с строка во фрейме pandas.
Теперь возникает проблема: скажем, я хочу удалить строку 130 (EMTE WIJCHEN). Я бы использовал df.idxmin
, что дало бы мне index , а именно 130. Затем я вызываю df.drop[index]
, но поскольку df.drop использует для удаления номера строк вместо индексов фрейма данных и Я только что удалил строку (# 126), теперь она (ошибочно) удаляет строку # 131, которая переместилась на место 130.
Почему это происходит, и как я могу улучшить свой код, чтобы я мог отбросить нужные строки в моем фрейме данных? Любые предложения приветствуются (также, если есть лучшая практика для решения таких проблем, может быть, решение, которое не адаптирует базу данных на месте?)