Una de las formas más habituales para importar los datos para un análisis es mediante el uso de archivos. Los cuales, debido a que los conjuntos de datos no se generan específicamente para un análisis en concreto, generalmente contienen más información de la que es necesaria para el estudio que se necesita realizar. Siendo necesaria más memoria para trabajar con ellos. En Pandas las funciones para importar archivos CSV y Excel por defecto cargan el archivo completo (una hoja en el caso de Excel) en un DataFrame, incluyendo todas las columnas que no son necesarias. Veamos cómo se puede solucionar esto e importar solamente algunas columnas de un archivo con Pandas.
Generar un archivo de ejemplo
En lugar de descargar un archivo se puede crear uno usando el código de la entrada “Guardar y leer archivos CSV con Python”. Al ejecutar el siguiente código se crea un archivo CSV y otro excel con el contenido del DataFrame df
.
import pandas as pd data = {'first_name': ['Sigrid', 'Joe', 'Theodoric','Kennedy', 'Beatrix', 'Olimpia', 'Grange', 'Sallee'], 'last_name': ['Mannock', 'Hinners', 'Rivers', 'Donnell', 'Parlett', 'Guenther', 'Douce', 'Johnstone'], 'age': [27, 31, 36, 53, 48, 36, 40, 34], 'amount_1': [7.17, 1.90, 1.11, 1.41, 6.69, 4.62, 1.01, 4.88], 'amount_2': [8.06, "?", 5.90, "?", "?", 7.48, 4.37, "?"]} df = pd.DataFrame(data, columns = ['first_name', 'last_name', 'age', 'amount_1', 'amount_2']) df.to_csv('example.csv', index=False) df.to_excel('example.xlsx', index=False)
Eliminar algunas columnas una vez importado el archivo
En este punto, sí para un análisis solamente son necesarias las columnas con el nombre y el apellido del cliente se puede importar el archivo y seleccionar únicamente aquellas necesarias. Las funciones de Pandas devuelven un DataFrame como el que se ha creado en la sección anterior.
pd.read_csv('example.csv')
first_name last_name age amount_1 amount_2 0 Sigrid Mannock 27 7.17 8.06 1 Joe Hinners 31 1.90 ? 2 Theodoric Rivers 36 1.11 5.9 3 Kennedy Donnell 53 1.41 ? 4 Beatrix Parlett 48 6.69 ? 5 Olimpia Guenther 36 4.62 7.48 6 Grange Douce 40 1.01 4.37 7 Sallee Johnstone 34 4.88 ?
Por lo que se puede usar loc
para seleccionar únicamente las necesarias.
pd.read_csv('example.csv').loc[:, ('first_name', 'last_name')]
first_name last_name 0 Sigrid Mannock 1 Joe Hinners 2 Theodoric Rivers 3 Kennedy Donnell 4 Beatrix Parlett 5 Olimpia Guenther 6 Grange Douce 7 Sallee Johnstone
Importar solamente algunas columnas de un archivo con Pandas
El proceso anterior produce el resultado deseado, un DataFrame con las columnas 'first_name'
y 'last_name'
. Pero es más eficiente usar la propiedad usecols
de read_csv()
y read_excel()
para importar solamente las columnas necesarias. Esta propiedad requiere una lista con las columnas del archivo que se desea importar, siendo posible obtener el resultado deseado con el siguiente código.
pd.read_csv('example.csv', usecols=['first_name', 'last_name'])
first_name last_name 0 Sigrid Mannock 1 Joe Hinners 2 Theodoric Rivers 3 Kennedy Donnell 4 Beatrix Parlett 5 Olimpia Guenther 6 Grange Douce 7 Sallee Johnstone
Algo que también se puede hacer para los archivos Excel.
pd.read_excel('example.xlsx', usecols=['first_name', 'last_name'])
Conclusiones
La propiedad usecols
de las funciones read_csv()
y read_excel()
facilita importar solamente algunas columnas de un archivo con Pandas. Algo que nos permite trabajar con conjunto de datos más pequeños. Reduciendo así la necesidad de memoria y posiblemente acelerando los análisis al omitir la carga de datos innecesarios.
Deja una respuesta