Python: limpieza de datos

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.

¿Cuándo y por qué faltan datos?

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.

Verifique los valores perdidos

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 –

Ejemplo

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

Borrar / completar datos faltantes

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.

Reemplazar NaN con un valor escalar

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.

Llenar NA de un lado a otro

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

Ejemplo

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

Eliminar valores perdidos

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.

Ejemplo

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

Reemplazar valores comunes faltantes (o)

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.

Ejemplo

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

🚫