Converting values outside of range to NA

Viewed 174

I have an age column: df.age, where some values exist that don't make sense in the given context.

How can I convert values that are outside the range of 18-100 to NA?

I know how to do it in R since there's a function for it, but is there something similar in Python?

3 Answers

Try with Series.where:

df['age'] = df['age'].where((18 <= df['age']) & (df['age'] <= 100))

Or with np.where:

df['age'] = np.where((18 <= df['age']) & (df['age'] <= 100), df['age'], np.nan)

Sample Frame:

df = pd.DataFrame({'age': [16, 17, 18, 19, 20, 100, 101, 102]})
   age
0   16
1   17
2   18
3   19
4   20
5  100
6  101
7  102

Sample Output:

     age
0    NaN
1    NaN
2   18.0
3   19.0
4   20.0
5  100.0
6    NaN
7    NaN

Use loc with between

# sample frame
# df = pd.DataFrame({'age': [1,2,3,1,18,22,60,100,101]})
df.loc[~df['age'].between(18,100), 'age'] = np.nan

     age
0    NaN
1    NaN
2    NaN
3    NaN
4   18.0
5   22.0
6   60.0
7  100.0
8    NaN

You can use .mask() together with .between() as follows:

df['age'] = df['age'].mask(~df['age'].between(18,100))

.mask() replace value (default to NaN) when the test condition is true.

Related