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)