Python

Optimizar el uso de memoria en Pandas con memory_usage

Al trabajar con grandes conjuntos de datos conocer el espacio ocupa en memoria cada una de las características es clave. Especialmente cuando es necesario eliminar características para reducir el tamaño ocupado. La forma para obtener esta información en los DataFrame de Python es mediante el método memory_usage(), el cual permite evaluar y optimizar el uso de memoria en Pandas. En esta entrada se analizará cómo utilizar este método y se explicará por qué algunos datos pueden ocupar más espacio que otros.

El método memory_usage

En los DataFrame de Pandas, el método memory_usage() permite analizar el consumo de memoria que realiza cada una de las series del conjunto de datos. Información que se puede utilizar para reducir la huella de memoria. Algo que es especialmente útil cuando se trabaja con grandes conjuntos de datos y es necesario optimizar el rendimiento de los análisis y aplicaciones.

El método se puede llamar tal cual, simplemente escribiendo df.memory_usage(), donde df es el DataFrame que se desea analizar. Pero, en el caso de contar con objetos complejos, solamente ofrece una aproximación del uso de memoria. Para conseguir un análisis más preciso del uso de memoria se puede asignar en valor verdadero al parámetro deep, esto es llamar al método df.memory_usage(deep=True). Cuando se activa la opción deep evaluará el uso de memoria que hacen todos los registros del conjunto de datos.

Ejemplo de uso con el conjunto de datos “tips” de Seaborn

La mejor manera de comprender el uso de memory_usage() es mediante un ejemplo práctico, para ello se usará el conjunto de datos “tips” de la biblioteca Seaborn. Para ello se debe importar la librería y cargar los datos. Una vez hecho esto, se puede llamar al método para conocer cuál es el uso de memoria de cada una de las columnas. Lo que se muestra en el siguiente ejemplo.

import seaborn as sns
import pandas as pd

# Cargar el conjunto de datos de ejemplo de Seaborn
tips = sns.load_dataset('tips')

# Obtener el uso de memoria del DataFrame
tips.memory_usage()
Index          132
total_bill    1952
tip           1952
sex            368
smoker         368
day            448
time           368
size          1952
dtype: int64

En donde se puede ver como las columnas que más espacio ocupan son total_bill, tip y size, los valores reales. Pero, como se ha comentado antes, esto es una aproximación si se indica la opción deep=True en el método los resultados cambiarán.

# Obtener el uso de memoria en detalle del DataFrame
tips.memory_usage(deep=True)
Index          132
total_bill    1952
tip           1952
sex            476
smoker         471
day            657
time           477
size          1952
dtype: int64

Nótese como para las columnas que son de tipo texto el valor cambia, esto es así porque en caso anterior solamente utilizo algunos valores para calcular el tamaño. Lo que ofrece una aproximación, pero no un valor exacto.

Identificando las columnas que más memoria consumen

El resultado obtenido en la sección anterior se puede utilizar para identificar las columnas que más memoria consumen. En el caso anterior el conjunto de datos era pequeño y esto se puede hacer a mano, pero en uno con más columnas lo mejor es ordenar los resultados. Lo que se puede conseguir mediante el método sort_values().

# Obtener el uso de memoria del DataFrame ordenado
tips.memory_usage(deep=True).sort_values(ascending=False)
total_bill    1952
tip           1952
size          1952
day            657
time           477
sex            476
smoker         471
Index          132
dtype: int64

Un resultado que nos facilita la selección de las columnas que se deben eliminar.

Conclusiones

En esta entrada se ha visto el funcionamiento del método memory_usage() con el cual se puede conocer la memoria usada por cada una de las columnas de un conjunto de datos. Una información que se puede usar para optimizar el uso de memoria en Pandas.

Imagen de Cliff Smith en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Pandas

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.