La falta de datos siempre es un problema en escenarios de la vida real. Áreas como el aprendizaje automático y la minería de datos enfrentan desafíos significativos en la precisión de las predicciones de sus modelos debido a la mala calidad de los datos causada por valores perdidos. En estas áreas, el manejo de los valores perdidos es el enfoque principal para hacer que sus modelos sean más precisos y confiables.
Considere una encuesta de productos en línea. A menudo, las personas no comparten toda la información relacionada con ellos. Pocas personas comparten su experiencia, pero no cuánto tiempo han estado usando el producto; pocas personas hablan de cuánto tiempo han estado usando el producto, sus experiencias, pero no su información de contacto. Así, de una forma u otra, siempre faltan algunos datos, y esto es muy común en tiempo real.
Veamos ahora cómo podemos manejar los valores perdidos (digamos NA o NaN) usando Pandas.
# import the pandas library import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df
Su Salida como sigue –
one two three a 0.077988 0.476149 0.965836 b NaN NaN NaN c -0.390208 -0.551605 -2.301950 d NaN NaN NaN e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g NaN NaN NaN h 0.085100 0.532791 0.887415
Usando la reindexación, creamos un DataFrame con valores faltantes. A la salida Yaya instalaciones No un número.
Para facilitar la búsqueda de valores perdidos (y para diferentes tipos de matrices), Pandas proporciona nulo() y no cero () funciones que también son métodos para objetos Series y DataFrame –
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df['one'].isnull()
Su Salida como sigue –
a False b True c False d True e False f False g True h False Name: one, dtype: bool
Pandas proporciona varios métodos para borrar los valores perdidos. La función fillna puede «llenar» los valores NA con datos no nulos de dos formas, que ilustramos en las siguientes secciones.
El siguiente programa muestra cómo se puede reemplazar «NaN» por «0».
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(3, 3), index=['a', 'c', 'e'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c']) print df print ("NaN replaced with '0':") print df.fillna(0)
Su Salida como sigue –
one two three a -0.576991 -0.741695 0.553172 b NaN NaN NaN c 0.744328 -1.735166 1.749580 NaN replaced with '0': one two three a -0.576991 -0.741695 0.553172 b 0.000000 0.000000 0.000000 c 0.744328 -1.735166 1.749580
Aquí estamos llenando con un valor cero; en su lugar, también podemos completar cualquier otro valor.
Usando los conceptos de relleno discutidos en el capítulo Reindexación, completaremos los valores faltantes.
Metodología | Actuar |
---|---|
almohadilla / relleno | Métodos de relleno hacia adelante |
relleno / relleno | Métodos de relleno Volver |
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.fillna(method='pad')
Su Salida como sigue –
one two three a 0.077988 0.476149 0.965836 b 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 d -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 g -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
Si solo desea excluir los valores perdidos, use dropna funcionar junto con eje argumento. De forma predeterminada, eje = 0, es decir, a lo largo de la línea, lo que significa que si algún valor de la línea es NA, se excluye toda la línea.
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randn(5, 3), index=['a', 'c', 'e', 'f', 'h'],columns=['one', 'two', 'three']) df = df.reindex(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']) print df.dropna()
Su Salida como sigue –
one two three a 0.077988 0.476149 0.965836 c -0.390208 -0.551605 -2.301950 e -2.000303 -0.788201 1.510072 f -0.930230 -0.670473 1.146615 h 0.085100 0.532791 0.887415
A menudo tenemos que reemplazar el valor general con algún valor específico. Podemos lograr esto utilizando el método de reemplazo.
Reemplazar NA con un valor escalar es equivalente al comportamiento fillna () función.
import pandas as pd import numpy as np df = pd.DataFrame({'one':[10,20,30,40,50,2000], 'two':[1000,0,30,40,50,60]}) print df.replace({1000:10,2000:60})
Su Salida como sigue –
one two 0 10 10 1 20 0 2 30 30 3 40 40 4 50 50 5 60 60
🚫