Python 将数据帧中某列的值设置为给定值(f.e.NaN),超出定义的间隔限制

Python 将数据帧中某列的值设置为给定值(f.e.NaN),超出定义的间隔限制,python,pandas,dataframe,limit,Python,Pandas,Dataframe,Limit,如果定义了有效值的间隔限制,则应将其之外的所有数据帧列值设置为给定值,即NaN。定义限制和数据框内容的值可以假定为数字类型 具有以下限制和数据帧: min = 2 max = 7 df = pd.DataFrame({'a': [5, 1, 7, 22],'b': [12, 3 , 10, 9]}) a b 0 5 12 1 1 3 2 7 10 3 22 9 在列a上设置限制将导致: a b 0 5 12 1 NaN 3 2

如果定义了有效值的间隔限制,则应将其之外的所有数据帧列值设置为给定值,即
NaN
。定义限制和数据框内容的值可以假定为数字类型

具有以下限制和数据帧:

min = 2
max = 7
df = pd.DataFrame({'a': [5, 1, 7, 22],'b': [12, 3 , 10, 9]})

    a   b
0   5  12
1   1   3
2   7  10
3  22   9
在列
a
上设置限制将导致:

     a   b
0    5  12
1  NaN   3
2    7  10
3  NaN   9

使用
where
之间的

df.a=df.a.where(df.a.between(min,max),np.nan)
df
Out[146]: 
     a   b
0  5.0  12
1  NaN   3
2  7.0  10
3  NaN   9
clip

df.a.clip(min,max)
Out[147]: 
0    5.0
1    NaN
2    7.0
3    NaN
Name: a, dtype: float64

您也可以将
.loc
一起使用

import pandas as pd
import numpy as np

df = pd.DataFrame({'a': [5, 1, 7, 22],'b': [12, 3 , 10, 9]})

min = 2
max = 7

df.loc[~df.a.between(min,max), 'a'] = np.nan

我忘记了剪辑!它比我的where/between好,但我认为你的掩码有点难看。@DSM yep使用掩码有点多余,因为我们已经有where:-)注意:如果min大于max,那么所有值都将使用
df.a.between(min,max)