python - seleccionar - Consultando por NaN y otros nombres en Pandas
pandas tutorial (3)
Digamos que tengo un df marco de datos con un value columna value contiene algunos valores flotantes y algunos NaN . ¿Cómo puedo obtener la parte del marco de datos donde tenemos NaN usando la sintaxis de consulta ?
Lo siguiente, por ejemplo, no funciona:
df.query( ''(value < 10) or (value == NaN)'' )
Obtengo el name NaN is not defined (igual para df.query(''value ==NaN'') )
En términos generales, ¿hay alguna forma de usar nombres numpy en la consulta, como inf , nan , pi , e , etc.?
En general, podrías usar @local_variable_name , así que algo como
>>> pi = np.pi; nan = np.nan
>>> df = pd.DataFrame({"value": [3,4,9,10,11,np.nan,12]})
>>> df.query("(value < 10) and (value > @pi)")
value
1 4
2 9
funcionaría, pero nan no es igual a sí mismo, por lo que value == NaN siempre será falso. Una forma de solucionar esto es usar ese hecho y usar value != value isnan como una comprobación de isnan . Tenemos
>>> df.query("(value < 10) or (value == @nan)")
value
0 3
1 4
2 9
pero
>>> df.query("(value < 10) or (value != value)")
value
0 3
1 4
2 9
5 NaN
Para filas donde el value no es nulo
df.query("value == value")
Para filas donde el value es nulo
df.query("value != value")
Podrías hacer algo como esto. Nota: deberá importar el módulo numpy (as np)
df[df[''value''].apply(np.isnan)]