Diga con este marco de datos

df = pd.DataFrame({'name' : ['A','B'], 'date' : pd.to_datetime(['2000-01-01','2000-01-02']), 'value' : [np.nan, 1]})

        date name  value
0 2000-01-01    A    NaN
1 2000-01-02    B    1.0

¿Cómo puedo verificar qué elemento está nan dentro de df.applymap? (es decir, sin usar df.isnull)

El problema proviene de donde quiero usar el estilo html de pandas. Tenemos el resaltado nan incorporado

df.style.highlight_null()

Pero cambia el color de fondo, en cambio quiero que "nan" se muestre en rojo.

Así que necesito hacerlo yo misma con applymap

df.style.applymap(lambda x: 'color: red' if isnan(x) else '')

Pero, ¿cómo puedo verificar si un valor es nan, cuando también puede ser datetime / string? np.isnan fallará en las cadenas. np.isreal(x) and np.isnan(x) también falla en la fecha y hora.

1
jf328 5 mar. 2017 a las 21:35

2 respuestas

La mejor respuesta

Puede usar pd.isnull (), que trata con una gama más amplia de tipos para la verificación de valores perdidos:

import pandas as pd
df.style.applymap(lambda x: 'color: red' if pd.isnull(x) else '')

enter image description here

6
Psidom 5 mar. 2017 a las 18:46

También puede usar el hecho de que los valores de coma flotante ̀NaN` no son iguales a sí mismos:

df.style.applymap(lambda x: '' if x==x else 'color: red')
0
Paul Rougieux 4 dic. 2019 a las 10:33