Pandas过滤NaN值问题:如何组合id>1000与id为NaN的筛选条件
解决DataFrame筛选id>1000或id为NaN行的问题
首先得明确:你之前用== NaN或者=='Nan'都不行,是因为NaN的特殊性质——它和任何值(包括自己)比较的结果都是False,所以直接用等于判断完全无效。另外你写的id>1000 & id==NaN逻辑也有问题,这两个条件不可能同时满足,你要的应该是满足其中一个即可,所以得用逻辑或|,不是逻辑与&。
给你两种可行的写法:
- 用pandas的
isna()函数(和isnull()功能完全一致,任选其一即可):
df.loc[(df['id'] > 1000) | pd.isna(df['id'])]
- 直接调用Series的
isna()方法,写法更简洁:
df.loc[(df['id'] > 1000) | df['id'].isna()]
注意一定要给每个条件单独加括号,因为|的优先级比比较运算符高,不加括号会导致运算顺序出错,得不到正确结果。
如果之前你试过numpy的isnan()没成功,大概率是因为逻辑运算符用错了(用了&而不是|),或者没加括号导致运算顺序不对,换成上面的写法就能解决问题。
内容的提问来源于stack exchange,提问作者Grzegorz Z
相关产品推荐
相关产品推荐

