Удаление строк, содержащих NaN, при сохранении индекса

1

Я пытаюсь clean очень большой фрейм данных с помощью Pandas.

Набор данных содержит повторяющиеся столбцы для таких показателей, как высота, вес, пол и возраст. Некоторые из строк имеют данные для имени столбца currentAge тогда как другие строки имеют данные для имени столбца currentAge2.

Итак, я хочу отбросить строки с NaN как в currentAge и в currentAge2 например, потому что они бесполезные точки данных. Я хотел бы сделать то же самое для всех других показателей.

Индекс моего фрейма данных начинается с 0. Ниже приведен код, который я попробовал.

for index, row in csv.iterrows():
    if ((math.isnan(row['currentAge']) and math.isnan(row['currentAge2'])) == True):
        csv.drop(csv.index[index])

Это не работает, и когда я использую in place = True, я получаю ошибку индекса за пределами границ. Если кто-то может пролить свет на то, как я мог бы правильно очистить этот фрейм данных, это было бы здорово. csv - это имя моего фрейма данных.

Теги:
pandas

2 ответа

4
Лучший ответ

Я не думаю, что нам нужно iterrows здесь.

csv[~(csv['currentAge'].isnull())&(csv['currentAge2'].isnull())]
  • 0
    Это сработало! Можете ли вы объяснить, что именно происходит с оператором ~ там?
  • 0
    @ b3dog pandas основаны на столбцах, они проверяют все строки в столбцах, и мы просто добавляем and (&) с двумя условиями (также, если это то, что вам нужно, вы хотели бы повысить и принять его?)
0

Если вы хотите сбросить строки с помощью NaN в currentAge и currentAge2, вы также можете попробовать:

csv.dropna(how='all', subset=['currentAge','currentAge2'], inplace=True)

В документах объяснить, как kwargs, how и subset работу. Это также проще в использовании, если вам нужно рассмотреть больше столбцов.

Надеюсь, это поможет.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню