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)]