Ingestión de datos utilizando la librería Pandas

Autor: Luis Fernando Apáez Álvarez

Clase 5: Importaciones de archivos


Importaciones de archivos planos

Comenzaremos por importar los datos para trabajar en esta clase

podemos ver cuántas filas y cuántas columnas tiene la tabla que importamos en el dataframe data

con lo cual el dataframe tiene 1476 filas y 147 columnas. A veces, toda la información que importemos no es necesaria para nuestro fin, de tal manera podemos limitarla. Por ejemplo, podemos sólo importar la información de las primeras 5 columnas utilizando usecols dentro de la importación

De tal manera limitamos la información por columnas. También podemos limitar la información por filas, por ejemplo, sólo considerar las primeras 500 filas

data = pd.read_csv(cadena, nrows=500)

o considerar 476 filas a partir de la fila 1000 (es decir que se estarían cosniderando las filas del 1001 al 1476):

Por otro lado, cuando hacemos la importación, por default se interpreta que la primer fila corresponde a las etiquetas correspondientes de las columnas. Así, podemos escribir también header=None para especificar que la tabla no tiene nombres de columnas, por lo cual Pandas hará que los nombres de las columnas sea una enumeración comenzando por el cero.

Podemos combinar lo anterior y agregar names= para colocar el nombre de las columnas manualmente. Por ejemplo, de la tabla anterior vemos como Pandas tomó los valores de la primer fila que encontró de acuerdo a nuestras especificaciones y los colocó como nombre de las columnas de dicha tabla. Podemos modificar lo anterir como sigue

donde list(data) nos arroja una lista del nombre de las columnas de la tabla que tenemos en el dataframe data; por lo que estos nombres fueron asignados al nombre de las columnas de este nuevo dataframe.

Manejo de errores y datos pérdidos

En estos podríamos tener:

Comencemos por ver el tipo de dato de las columnas del dataframe data

donde object es el equivalente de string en Pandas. Tenemos que zipcode está almacenado como un número entero, pero en realidad queremos que este sea una cadena de texto. Para lograr lo anterior escribimos

donde cambiamos el tipo de dato de la columna zipcode a tipo string (u object) utilizando un diccionario en el valor dtype= a la hora de la importación.

De forma automática, Pandas puede identificar los valores nulos o NA, sin embargo, puede ocurrir que dichos valores estén representados de otra forma en los registros del dataframe. Por ejemplo, supangamos que el valor 0 en la columna zipcode es en realidad un valor nulo. Podemos indicar lo anterior a Pandas escribiendo

utilizando nuevamente un diccionario para especificar que en la columana zipcode el valor de 0 (en cadena de texto) debe considerarse como una valor nulo. Así, podemos considerar en el dataframe data5 sólo las filas donde tengamos valores nulos en la columna zipcode escribiendo

Finalmente está el caso en que Pandas no puede analizar la información de la importación. Para ello tenemos

Por defecto está configurado que error_bad_lines=True por lo que Pandas no saltará aquellas líneas que no puede reconocer y por ende arrojará un error.

De tal manera, podemos escribir algo como

data8 = pd.read_csv(cadena, error_bad_lines=False, warn_bad_lines=True)

para saltar aquellas líneas que Pandas no puede reconocer y arrojar un mensaje especificando ésto.