Pandas DataFrame удаляет строки NaN в зависимости от условия? - PullRequest
2 голосов
/ 07 августа 2020

Pandas DataFrame, удаляющий строки NaN на основе условия.

Я пытаюсь удалить строки, чьи gender==male и status == NaN.

Пример df:

        name     status        gender   leaves
0       tom        NaN          male      5 
1       tom        True         male      6
2       tom        True         male      7
3       mary       True         female    1
4       mary       NaN          female    10
5       mary       True         female    15
6       john       NaN          male       2
7       mark      True          male       3

Ожидаемый результат:

        name     status        gender   leaves
0       tom        True         male      6
1       tom        True         male      7
2       mary       True         female    1
3       mary       NaN          female    10
4       mary       True         female    15
5       mark      True          male       3

Ответы [ 2 ]

4 голосов
/ 07 августа 2020

Вы можете использовать функцию isna (или isnull), чтобы получить строки со значением NaN. Обладая этими знаниями, вы можете фильтровать фрейм данных, используя что-то вроде:

conditions = (df.gender == 'male')&(df.status.isna())
filtered_df = df[~conditions]
0 голосов
/ 07 августа 2020

Good One, предоставленный @Derlin, другой способ, который я пробовал, - это использовать fillna() заполнить NaN с -1 и проиндексировать их, как показано ниже:

>>> df[~((df.fillna(-1)['status']==-1)&(df['gender']=='male'))]

Только для справки * оператор 1006 * совпадает с np.logical_not() из numpy. Поэтому, если вы используете это: df[np.logical_not((df.fillna(-1)['status']==-1)&(df['gender']=='male'))] (не забудьте import numpy as np), означает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...