如何使用Numpy将数据框列的值范围替换为NaN?

时间:2018-08-14 11:33:56

标签: python pandas numpy

我有一个列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(..)

1 个答案:

答案 0 :(得分:1)

between用于Series.masknumpy.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