Pandas DataFrame removing NaN rows based on condition.
I'm trying to remove the rows whose gender==male
and status == NaN
.
Sample 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
Expected Ouput:
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
You can use isna
(or isnull
) function to get the rows with a value of NaN
. With this knowledge, you can filter your dataframe using something like:
conditions = (df.gender == 'male')&(df.status.isna())
filtered_df = df[~conditions]
Good One given by @Derlin, other way I tried is using fillna()
filled NaN
with -1 and indexed them, just like below:
>>> df[~((df.fillna(-1)['status']==-1)&(df['gender']=='male'))]
Just for reference ~
operator is the same as np.logical_not()
of numpy
. So if you use this: df[np.logical_not((df.fillna(-1)['status']==-1)&(df['gender']=='male'))]
(dont forget to import numpy as np
), means the same.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.