Почему не пропадают значения после применения .dropna()?

У меня в фрейме данных есть колонки с нулевыми значениями. Когда я делаю:

df.isnull().sum()

в списке колонок я наблюдаю следущее:

open_acc                  0
pub_rec                   0
pub_rec_bankruptcies    535
purpose                   0
revol_bal                 0
revol_util              276
sub_grade                 0
term                      0

Нужно убрать эти ряды, таким образом я делаю:

df['revol_util'].dropna()
df['pub_rec_bankruptcies'].dropna()

Однако, после этого ситуация не меняется, хотя и ошибки тоже никакой не выдается.


Ответы (1 шт):

Автор решения: MaxU

Большинство методов в Pandas создают новый объект (видоизмененную копию) и возвращают этот новый объект, не изменяя при этом оригинальный объект (DataFrame, Series, etc.). Иногда можно воспользоваться параметром inplace=True, для того чтобы изменить исходный объект вместо того, чтобы возвращать новый. Но в английской версии SO мне как то попался комментарий одного из основных разработчиков Pandas (Jeff Reback), что он сам предпочитает не использовать параметром inplace=True, т.к. в глубинах имплементации нет гарантии, что изменения будут сделаны на оригинальном объекте. Вместо этого часто происходит неявное создание нового объекта и замена оригинального обхекта новым. К сожалению, я не смог найти этот комментарий...

Метод DataFrame.dropna() по умолчанию возвращает новый фрейм (видоизменённую копию), но не меняет исходный фрейм.

Попробуйте так:

res = df.dropna(subset=['pub_rec_bankruptcies', 'revol_util'])
→ Ссылка