josiete.com

Python

Python 3.15: importar solo cuando hace falta

Logo de Python azul y amarillo en relieve sobre una superficie oscura, con bloques desenfocados al fondo

Importar una librería puede implicar leer archivos, ejecutar su código de inicialización y cargar otras dependencias. Ese trabajo se paga aunque después solo queramos mostrar la ayuda de una herramienta. Python 3.15 incorpora Explicit Lazy Imports, definido en el PEP 810 y recogido en las novedades de Python 3.15: podemos declarar un import y aplazar su carga hasta el primer uso.

Schema Drift en ETL: cuando los datos cambian y el código no se entera

Línea temporal de septiembre: los datos pasan de Schema A a B y C antes de que el ETL cambie de v1.0 a v1.1 y v1.2; las franjas naranjas señalan periodos cuya compatibilidad debe comprobarse

Cada mañana, un ETL recibe un CSV, convierte la edad a entero y carga los clientes. Ayer funcionaba con este fichero:

id,name,age
1,John,25
2,Mary,30

Hoy, el proveedor añade el país:

id,name,age,country
1,John,25,USA
2,Mary,30,UK

Unos días después, llega otra sorpresa:

csvkit: una caja de herramientas para trabajar con CSV desde la terminal

Ilustración de una terminal conectada a documentos CSV y tablas de datos mediante etapas de procesamiento

Te llega un fichero CSV. Antes de cargarlo en una base de datos, quieres saber qué columnas tiene, si faltan valores y qué registros te interesan. Abrir una hoja de cálculo funciona, pero resulta poco cómodo cuando tienes que repetir la misma operación con varios archivos. Escribir un programa para cada comprobación tampoco siempre compensa.

Cuando los bytes se disfrazan de texto: Unicode, Python y errores de codificación

Lluvia de caracteres verdes sobre fondo negro, con las palabras decode y encode resaltadas en el centro

Un fichero contiene José, pero después de pasar por un pipeline aparece José. Otro conserva las tildes, aunque una búsqueda de Jose devuelve también José. Y en un tercero los emojis se convierten en ?.

Los tres casos parecen problemas de texto, pero conviene investigar causas distintas: cómo interpretamos los bytes, cómo comparamos las cadenas y qué información se ha perdido durante el recorrido. Cambiar a UTF-8 sin localizar el fallo puede limitarse a guardar correctamente un texto que ya estaba estropeado.

Polars: Python acelera sus DataFrames con Rust y varios hilos

Ilustración del logo de Polars rodeado de columnas de datos y líneas de procesamiento paralelo

Python sigue siendo uno de los lenguajes más cómodos para explorar y transformar datos. Sin embargo, la comodidad de un DataFrame no siempre se traduce en velocidad: cuando crecen las columnas y las filas, el coste de memoria y de CPU se vuelve muy visible. Polars aborda ese problema con una librería de DataFrames escrita en Rust y con una API disponible desde Python.