14

Как удалить строки DataFrame в Pandas с NaN в определённом столбце

16

У меня есть 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 ответ(ов)

16

Вам не нужно удалять строки, содержащие NA для столбца 'EPS'. Вместо этого, вы можете просто отфильтровать ваш DataFrame, чтобы оставить только строки, где значение 'EPS' не является NA. Для этого используйте следующий код:

df = df[df['EPS'].notna()]

Этот код создаст новый DataFrame, в котором будут только те строки, где значение в столбце 'EPS' присутствует.

1

Вы можете использовать следующий код:

df.dropna(subset=['EPS'], how='all', inplace=True)

Этот метод удалит все строки из DataFrame df, в которых значения в столбце 'EPS' отсутствуют (NaN). Параметр how='all' указывает на удаление строк только в том случае, если все значения в указанном столбце NaN. Параметр inplace=True позволяет изменять оригинальный DataFrame без необходимости создавать новый.

1

Конечно, вы правы, это уже было обсуждено, но если вам нужен исключительно "пандовский" способ решения данной задачи, в отличие от общего описания, приведенного Аманом (что было замечательно), и на случай, если кто-то другой столкнется с этим:

import pandas as pd
df = df[pd.notnull(df['EPS'])]
0

Самое простое решение:

filtered_df = df[df['EPS'].notnull()]

Это решение намного лучше, чем использование np.isfinite().

0

Используйте метод dropna для удаления строк с пропущенными значениями в колонке 'EPS'. Ваш код выглядит правильно и просто:

df.dropna(subset=['EPS'], inplace=True)

Этот код удалит все строки из DataFrame df, в которых значение в колонке 'EPS' отсутствует (NaN). Параметр inplace=True означает, что изменения будут применены непосредственно к оригинальному DataFrame, без создания копии. Это быстрый и эффективный способ очистить ваш DataFrame от строк с отсутствующими данными в определенной колонке.

Для дополнительной информации вы можете ознакомиться с официальной документацией pandas.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь