DEV Community

Cover image for Limpieza de datos con Python
Leandro Ruiz
Leandro Ruiz

Posted on • Edited on

Limpieza de datos con Python

Primer paso: Exploración

En el momento de encontrarnos cara a cara con un dataset lo primero que hay que hacer es reconocer con que nos estamos enfrentando.
Para esto utilizaremos la función .head() de pandas, de esta manera entenderemos los tipos de información que contiene cada columna.

import pandas as pd
f = pd.read_csv(file)
f.head()
Enter fullscreen mode Exit fullscreen mode

Esta sentencia solo nos devuelve una muestra del dataset, pero para obtener datos rapidos de lo que hay dentro se puede utilizar el metodo describe.

f.describe()
Enter fullscreen mode Exit fullscreen mode

Si se lo escribe sin parametros, describe solo mostrará datos relevantes para columnas que contengan números. Ya que devolverá un cuadro en el que se observan la siguiente información:

  • count: cantidad de valores que contiene la columna.
  • mean: valor promedio.
  • std: desviación estandar.
  • min: valor mínimo.
  • 25%: primer cuartil.
  • 50%: segundo cuartil.
  • 75%: tercer cuartil.
  • max: valor máximo.
  • dtype: tipo de valores que contiene la columna.

Para obtener datos de columnas que contienen valores de otro tipo (por ejemplo strings), debemos agregar un parametro para que tome en cuenta a todo el dataset y no solo a los valores numéricos.

f.describe(include = 'all')
Enter fullscreen mode Exit fullscreen mode

Y de esta manera, el cuadro incluira tres nuevas categorias, presentadas a continuación:

  • unique: cantidad de valores únicos.
  • top: valor único con más repeticiones.
  • freq: cantidad de veces que aparece el valor más repetido.

Segundo paso: Tipos de datos

Para tener un dataset ordenado primero debemos confirmar que los tipos de datos de cada columna estan bien posicionados.
En primer lugar, obtenemos los tipos de datos de cada columna de la siguiente manera:

f.dtypes()
Enter fullscreen mode Exit fullscreen mode

Esto retornará el nombre de cada columna junto con el tipo de dato que contiene, en caso de que este errado, debemos sustituir el dato equivocado por el que es cierto. En caso de que corresponda float, seria asi:

f[['column_name']] = f[['column_name']].astype(float)
Enter fullscreen mode Exit fullscreen mode

Tercer paso: Tratar con los datos perdidos

Luego de tener nuestro primer contacto con el set de datos, lo siguiente es averiguar si está completo o tiene datos perdidos, para poder tomar cartas en el asunto:

missing_data = f.isnull()
for column in missing_data.columns.values.tolist():
    print(column)
    print(missing_data[column].value_counts())
    print('')
Enter fullscreen mode Exit fullscreen mode

En caso de que haya datos perdidos del mismo tipo que variable que debemos predecir, es muy recomendable eliminar la fila entera para que no de problemas en los modelos a desarrollar.

Esto se hace reemplazando los valores perdidos por np.nan (not a number), cortesía de la librería Numpy:

import numpy as np
f.replace("?", np.nan, inplace = True)
f.dropna(subset=['column_name'], axis = 0, inplace= True)
f.reset_index(drop = True, inplace = True)
Enter fullscreen mode Exit fullscreen mode

Tambien hay que reemplazar a los datos perdidos que seran útiles al momento de desarrollar nuestro modelo. Para esto hay que averiguar qué tipo de dato es y como tratarlo:

  • Strings: la mejor práctica es reemplazar el dato perdido por el que se repite con más frecuencia.
  • Integers: en este caso, el dato perdido debe reemplazarse por el promedio de su misma columna.

Primer caso: Strings perdidos

Cuando el dato a reemplazar es del tipo string, primero hay que averiguar cual es el que se repite con más frecuencia dentro de la misma columna:

f.describe(include=[np.object])
Enter fullscreen mode Exit fullscreen mode

Esta linea imprimirá un recuadro en el cual solo se toman en cuenta las columnas de tipo object donde se observa los siguientes apartados: count, unique, top y freq. De esta forma, el string que aparezca en el apartado top sera el que se repita una mayor cantidad de veces y por el cual debemos reemplazar todos los Nan de su categoria.

f['column_name'].replace(np.nan, 'Top string', inplace = True)
Enter fullscreen mode Exit fullscreen mode

Segundo caso: Integers perdidos

En el caso de los integer que faltan primero hay que identificar promedio de la columna para que este dato perdido no modifique los resultados de los entrenamientos y las pruebas del modelo.
El promedio se obtiene de la siguiente manera:

average_column_name = f['column_name'].astype(float).mean(axis = 0)
Enter fullscreen mode Exit fullscreen mode

Y luego se reemplaza los datos perdidos con este promedio:

f['column_name'].replace(np.nan, average_column_name, inplace = True)
Enter fullscreen mode Exit fullscreen mode

Conclusion

Es todo por hoy.


Nota: estoy aprendiendo sobre data science y este es un tutorial que realicé para reforzar mi conocimiento. Por esa razón puede haber errores o no es tan completo como debería. Espero puedas entender y que este articulo sirva de algo. Gracias por leer.

Top comments (0)