我有一个列RH_1
的数据集:
RH_1
--------
36.999
34.555
36.777
33.688
38.999
37.667
...
我想用NaN
替换在一定范围内的一组数字。对于前。我希望该列中36-37范围内的所有值都显示NaN
。
所以我的首选输出将是:
RH_1
--------
NaN
34.555
NaN
33.688
38.999
37.667
所以我在用这段代码:
train['RH_1']=train['RH_1'].apply(lambda x: np.NaN if(x in range(36,37)) else x)
但是当我执行train.isnull().sum()
时,它仍然显示该列中没有空值,并且执行该代码也没有任何错误。
P.S。我更喜欢使用np.where()
函数下的lambda
完成此操作,因为我正在练习。如果有的话,还要求使用更简单的方法来替代解决方案。
P.P.S。我签出了this answer,但是它正在替换为某些值,并且也没有选择in range(..)
。
答案 0 :(得分:1)
将between
用于Series.mask
或numpy.where
的布尔掩码:
train['RH_1'] = train['RH_1'].mask(train['RH_1'].between(36,37))
或者:
train['RH_1'] = np.where(train['RH_1'].between(36,37), np.nan, train['RH_1'])
print (train)
RH_1
0 NaN
1 34.555
2 NaN
3 33.688
4 38.999
5 37.667