Pandas-удаление строк только со значениями NaN

У меня есть фрейм данных, содержащий много значений NaN. Я хочу удалить строки, содержащие слишком много значений NaN; в частности: 7 или более.

Я попытался с помощью dropna функция несколько способов, но кажется ясным, что он жадно удаляет столбцы или строки, содержащие любой значение NaN.

этот вопрос (нарезать панд DataFrame по строке), показывает мне, что если я могу просто скомпилировать список строк, у которых слишком много Значения NaN, я могу удалить их все с помощью простого

df.drop(rows)

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

вот некоторые псевдо-код, который я думаю, находится на правильном пути:

### LOOP FOR ADDRESSING EACH row:
    m = total - row.count()
    if (m > 7):
        df.drop(row)

Я все еще новичок в панд поэтому я очень открыт для других способов решения этой проблемы; будь они проще или сложнее.

2 ответов


в основном способ сделать это-определить количество cols, установить минимальное количество значений non-nan и удалить строки, которые не соответствуют этим критериям:

df.dropna(thresh=(len(df) - 7))

посмотреть docs


необязательный аргумент thresh df.dropna позволяет вам дать ему минимальное количество значений, отличных от NA, чтобы сохранить строку.

df.dropna(thresh=df.shape[1]-7)