¿Cómo reemplazar todos los valores en un Pandas Dataframe que no está en una lista?

Tengo una lista de valores. ¿Cómo puedo reemplazar todos los valores en una columna de Dataframe que no esté en la lista de valores dada?

Por ejemplo,

>>> df = pd.DataFrame(['D','ND','D','garbage'], columns=['S']) >>> df S 0 D 1 ND 2 D 3 garbage >>> allowed_vals = ['D','ND'] 

Quiero reemplazar todos los valores en la columna S del dataframe que no están en la lista allowed_vals con ‘Ninguno’. ¿Cómo puedo hacer eso?

Puede usar isin para verificar la membresía en allowed_list , ~ para negar eso, y luego .loc para modificar la serie en su lugar:

 >>> df.loc[~df["S"].isin(allowed_vals), "S"] = "None" >>> df S 0 D 1 ND 2 D 3 None 

porque

 >>> df["S"].isin(allowed_vals) 0 True 1 True 2 True 3 False Name: S, dtype: bool 

Si desea modificar todo el marco (no solo la columna S), puede hacer una máscara de tamaño de marco:

 >>> df ST 0 DD 1 ND A 2 D ND 3 garbage A >>> df[~df.isin(allowed_vals)] = "None" >>> df ST 0 DD 1 ND None 2 D ND 3 None None