Revista Informática

Importar solamente algunas columnas de un archivo con Pandas

Publicado el 03 octubre 2022 por Daniel Rodríguez @analyticslane
Importar solamente algunas columnas de un archivo con Pandas

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'])

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.


Volver a la Portada de Logo Paperblog