values remove not dropna check python numpy pandas nan

python - remove - pandas is not null



¿Cuál es la diferencia entre NaN y None? (4)

La función isnan() comprueba si algo es "No es un número" y devuelve si una variable es un número o no, por ejemplo, isnan(2) devolvería falso

El myVar is not None condicional myVar is not None Devuelve si la variable está definida o no

Su matriz numpy utiliza isnan() porque está destinada a ser una matriz de números e inicializa todos los elementos de la matriz en NaN estos elementos se consideran "vacíos".

Estoy leyendo dos columnas de un archivo csv usando pandas readcsv() y luego asignando los valores a un diccionario. Las columnas contienen cadenas de números y letras. Ocasionalmente hay casos en que una celda está vacía. En mi opinión, el valor leído en esa entrada del diccionario debe ser None pero en cambio se le asigna nan . Seguramente, None es más descriptivo de una celda vacía ya que tiene un valor nulo, mientras que nan solo dice que el valor leído no es un número.

¿Es correcto mi entendimiento, cuál es la diferencia entre None y nan ? ¿Por qué se asigna nan lugar de None ?

Además, mi verificación de diccionario para cualquier celda vacía ha estado usando numpy.isnan() :

for k, v in my_dict.iteritems(): if np.isnan(v):

Pero esto me da un error al decir que no puedo usar esta verificación para v . Supongo que es porque una variable entera o flotante, no una cadena, debe usarse. Si esto es cierto, ¿cómo puedo verificar v para un caso de "celda vacía" / nan ?


NaN se usa como marcador de posición para los datos faltantes consistentemente en pandas , la consistencia es buena. Normalmente leo / traduzco NaN como "perdido" . También vea la sección ''trabajando con datos faltantes'' en los documentos.

Wes escribe en la elección de los documentos de NA-representation '' :

Después de años de uso de producción, [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 (Not-A-Number) se utiliza en todas partes como el valor NA, y hay funciones API isnull y notnull que se pueden usar en todos los dtypes para detectar valores NA.
...
Por lo tanto, he elegido el enfoque Pythonic "practicality beats pureity" y he intercambiado la capacidad entera de NA por un enfoque mucho más simple de usar un valor especial en flotante y matrices de objetos para denotar NA, y promover matrices enteros a flotante cuando las NA deben ser introducidas.

Nota: el "gotcha" esa serie entera que contiene los datos faltantes se actualizan a flotantes .

En mi opinión, la razón principal para usar NaN (sobre Ninguno) es que se puede almacenar con el tipo de letra float64 de numpy, en lugar del tipo de objeto menos eficiente, ver 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 deshabilita toda la eficiencia en numpy.

Entonces repite 3 veces rápido: objeto == malo, float == bueno

Diciendo eso, 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 la segunda pregunta:
Debería utilizar isnull y notnull para probar la falta de datos (NaN).


NaN se puede usar como un valor numérico en operaciones matemáticas, mientras que None no puede (o al menos no debería).

NaN es un valor numérico, como se define en el estándar de coma flotante IEEE 754 . None es un tipo interno de Python ( NoneType ) y sería más como "inexistente" o "vacío" que "numéricamente inválido" en este contexto.

El principal "síntoma" de eso es que, si realiza, digamos, una media o una suma en una matriz que contiene NaN, incluso una sola, obtiene NaN como resultado ...

Por otro lado, no puede realizar operaciones matemáticas utilizando None como operando.

Entonces, dependiendo del caso, podría usar None como una forma de decirle a su algoritmo que no considere valores inválidos o inexistentes en los cálculos. Eso significaría que el algoritmo debería probar cada valor para ver si es None .

Numpy tiene algunas funciones para evitar que los valores NaN contaminen tus resultados, como nansum y nan_to_num por ejemplo.


NaN stants para NO un número .
None podría representar ninguno .