Как удалить строки DataFrame в Pandas с NaN в определённом столбце
У меня есть DataFrame, и я хочу оставить только те записи, в которых столбец EPS не содержит значений NaN. Пример исходного DataFrame:
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
Я хочу получить результат, который будет выглядеть так:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Как мне это сделать, например, с помощью метода df.drop(...)
или другого подхода?
5 ответ(ов)
Вам не нужно удалять строки, содержащие NA для столбца 'EPS'. Вместо этого, вы можете просто отфильтровать ваш DataFrame, чтобы оставить только строки, где значение 'EPS' не является NA. Для этого используйте следующий код:
df = df[df['EPS'].notna()]
Этот код создаст новый DataFrame, в котором будут только те строки, где значение в столбце 'EPS' присутствует.
Вы можете использовать следующий код:
df.dropna(subset=['EPS'], how='all', inplace=True)
Этот метод удалит все строки из DataFrame df
, в которых значения в столбце 'EPS' отсутствуют (NaN). Параметр how='all'
указывает на удаление строк только в том случае, если все значения в указанном столбце NaN. Параметр inplace=True
позволяет изменять оригинальный DataFrame без необходимости создавать новый.
Конечно, вы правы, это уже было обсуждено, но если вам нужен исключительно "пандовский" способ решения данной задачи, в отличие от общего описания, приведенного Аманом (что было замечательно), и на случай, если кто-то другой столкнется с этим:
import pandas as pd
df = df[pd.notnull(df['EPS'])]
Самое простое решение:
filtered_df = df[df['EPS'].notnull()]
Это решение намного лучше, чем использование np.isfinite()
.
Используйте метод dropna
для удаления строк с пропущенными значениями в колонке 'EPS'. Ваш код выглядит правильно и просто:
df.dropna(subset=['EPS'], inplace=True)
Этот код удалит все строки из DataFrame df
, в которых значение в колонке 'EPS' отсутствует (NaN). Параметр inplace=True
означает, что изменения будут применены непосредственно к оригинальному DataFrame, без создания копии. Это быстрый и эффективный способ очистить ваш DataFrame от строк с отсутствующими данными в определенной колонке.
Для дополнительной информации вы можете ознакомиться с официальной документацией pandas.
Как изменить порядок столбцов в DataFrame?
Выбор нескольких колонок в DataFrame Pandas
"Красивая печать всей Series / DataFrame в Pandas"
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas