NaN se usa como un marcador de posición para los datos faltantes de manera consistente en pandas , la consistencia es buena. Normalmente leo / traduzco NaN como "perdido" . También vea la sección 'trabajar con datos faltantes' en los documentos.
Wes escribe en los documentos 'elección de la representación de NA' :
Después de años de producción, el uso [NaN] ha demostrado, al menos en mi opinión, ser la mejor decisión dada la situación en NumPy y Python en general. El valor especial NaN (No-A-Number) se utiliza en todas partes como el valor NA, y hay funciones de API isnull
y notnull
que puede ser utilizado en todos los dtypes para detectar valores de NA.
...
Por lo tanto, he elegido el enfoque Pythonic de "practicidad vence a la pureza" y la capacidad NA de enteros intercambiados por un enfoque mucho más simple de usar un valor especial en arreglos flotantes y de objetos para denotar NA, y promover arreglos enteros a flotantes cuando los NA deben ser introducido.
Nota: el "gotcha" de que las series enteras que contienen datos faltantes son upcast a flotantes .
En mi opinión, la razón principal para usar NaN (en lugar de None) es que se puede almacenar con el tipo dtype float64 de numpy, en lugar del dtype de objeto menos eficiente, consulte las promociones de tipo NA .
# without forcing dtype it changes None to NaN!
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])
In [13]: s_bad.dtype
Out[13]: dtype('O')
In [14]: s_good.dtype
Out[14]: dtype('float64')
Jeff comenta (abajo) sobre esto:
np.nan
permite operaciones vectorizadas; es un valor flotante, mientras que None
, por definición, fuerza el tipo de objeto, que básicamente desactiva toda la eficiencia en numpy.
Entonces repita 3 veces rápido: objeto == malo, flotar == bueno
Dicho esto, muchas operaciones pueden funcionar igual de bien con None vs NaN (pero quizás no sean compatibles, es decir, a veces pueden dar resultados sorprendentes ):
In [15]: s_bad.sum()
Out[15]: 1
In [16]: s_good.sum()
Out[16]: 1.0
Para responder a la segunda pregunta:
debería utilizar pd.isnull
y pd.notnull
para probar los datos faltantes (NaN).
qwerty
no es un número.