Pandas para ingenieros de datos.  Técnicas avanzadas para procesar y cargar… |  por 💡Mike Shakhomirov |  febrero de 2024

Técnicas avanzadas para procesar y cargar datos de manera eficiente

Imagen generada por IA usando Kandinski

En esta historia, me gustaría hablar sobre las cosas que me gustan de Pandas y que uso con frecuencia en las aplicaciones ETL que escribo para procesar datos. Tocaremos el análisis de datos exploratorio, la limpieza de datos y las transformaciones del marco de datos. Demostraré algunas de mis técnicas favoritas para optimizar el uso de la memoria y procesar grandes cantidades de datos de manera eficiente usando esta biblioteca. Trabajar con conjuntos de datos relativamente pequeños en Pandas rara vez es un problema. Maneja datos en marcos de datos con facilidad y proporciona un conjunto de comandos muy conveniente para procesarlos. Cuando se trata de transformaciones de datos en marcos de datos mucho más grandes (1 Gb y más), normalmente usaría Spark y clústeres de computación distribuidos. Puede manejar terabytes y petabytes de datos, pero probablemente también costará mucho dinero ejecutar todo ese hardware. Es por eso que Pandas podría ser una mejor opción cuando tenemos que lidiar con conjuntos de datos de tamaño mediano en entornos con recursos de memoria limitados.

Generadores de Pandas y Python

En una de mis historias anteriores escribí sobre cómo procesar datos de manera eficiente usando generadores en Python. [1].

Es un truco sencillo para optimizar el uso de la memoria. Imaginemos que tenemos un enorme conjunto de datos en algún lugar de almacenamiento externo. Puede ser una base de datos o simplemente un archivo CSV grande y simple. Imagine que necesitamos procesar este archivo de 2 a 3 TB y aplicar alguna transformación a cada fila de datos de este archivo. Supongamos que tenemos un servicio que realizará esta tarea y solo tiene 32 Gb de memoria. Esto nos limitará en la carga de datos y no podremos cargar el archivo completo en la memoria para dividirlo línea por línea aplicando Python simple. split(‘\n’) operador. La solución sería procesarlo fila por fila y yield cada vez liberando memoria para la siguiente. Esto puede ayudarnos a crear un flujo constante de datos ETL hacia el destino final de nuestra canalización de datos. Puede ser cualquier cosa: un depósito de almacenamiento en la nube, otra base de datos, una solución de almacenamiento de datos (DWH), un tema de streaming u otro…