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

Los indicadores que se autocumplen, o cuando medir es modificar – El bestiario de los indicadores económicos absurdos (parte 7)

En las seis entregas anteriores hemos paseado por casi todos los géneros del disparate económico:…

4 días ago

Customer Lifetime Value: la fórmula clásica que todo analista debería dominar

El Customer Lifetime Value (CLV) es, probablemente, la métrica más importante que puede calcular una…

6 días ago

Analytics Lane lanza la versión 1.4 del laboratorio con nuevas herramientas de conversión y modelos avanzados de CLV

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.4, que…

1 semana ago

Lanzamos el video de ScoreFlow: crea scorecards de crédito de forma ágil y sin IT

En Analytics Lane seguimos apostando por desarrollar herramientas que simplifiquen el trabajo de analistas y…

2 semanas ago

Data Leakage en Credit Scoring: El Error que Invalida tu Modelo

Imagina que construyes un scorecard con un Gini de 0,85. Un resultado extraordinario, muy por…

2 semanas ago

This website uses cookies.