¿Cómo reemplazar un rango de valores con NaN en el dataframe de Pandas?

Tengo un enorme dataframe. ¿Cómo debo reemplazar un rango de valores (-200, -100) con NaN?

Puedes hacerlo de esta manera:

In [145]: df = pd.DataFrame(np.random.randint(-250, 50, (10, 3)), columns=list('abc')) In [146]: df Out[146]: abc 0 -188 -63 -228 1 -59 -70 -66 2 -110 39 -146 3 -67 -228 -232 4 -22 -180 -140 5 -191 -136 -188 6 -59 -30 -128 7 -201 -244 -195 8 -248 -30 -25 9 11 1 20 In [148]: df[(df>=-200) & (df<=-100)] = np.nan In [149]: df Out[149]: abc 0 NaN -63.0 -228.0 1 -59.0 -70.0 -66.0 2 NaN 39.0 NaN 3 -67.0 -228.0 -232.0 4 -22.0 NaN NaN 5 NaN NaN NaN 6 -59.0 -30.0 NaN 7 -201.0 -244.0 NaN 8 -248.0 -30.0 -25.0 9 11.0 1.0 20.0 

dataframe

Puedes usar pd.DataFrame.mask :

 df.mask((df >= -200) & (df <= -100), inplace=True) 

Este método reemplaza los elementos identificados por los valores True en una matriz booleana con un valor especificado, por defecto a NaN si no se especifica un valor.

De forma equivalente, use pd.DataFrame.where con la condición inversa:

 df.where((df < -200) | (df > -100), inplace=True) 

serie

Al igual que con muchos métodos, Pandas incluye versiones que funcionan con series en lugar de un dataframe completo. Entonces, para una columna df['A'] , puede usar pd.Series.mask con pd.Series.between :

 df['A'].mask(df['A'].between(-200, -100), inplace=True) 

Para el encadenamiento, tenga en cuenta inplace=False por defecto, por lo que también puede usar:

 df['A'] = df['A'].mask(df['A'].between(-200, -100))