Polars
32 pasos en 10 series de Python.
Polars es la biblioteca de dataframes que tomó las lecciones de pandas y empezó de nuevo en Rust. La API de expresiones es lo que hay que aprender: describes un cálculo y el motor decide cómo ejecutarlo, algo más cercano a SQL que a pandas.
Series y frames, luego expresiones, filtrado, agregación, remodelado y joins. Texto, listas y structs tienen su propia serie porque los datos anidados son donde Polars saca ventaja. Después series de tiempo, y la API lazy con su optimizador de consultas, que es la razón de estar aquí en primer lugar.
Series y frames
- SeriesUna Series de Polars es una columna tipada y con nombre sobre memoria Arrow.
- DataFrames de PolarsConstruir un DataFrame e inspeccionarlo.
- Leer CSVread_csv carga al instante; scan_csv difiere para que el planificador de consultas ayude.
- Tipos y conversionesLos tipos de Polars son explícitos: convierte a propósito, estricto por defecto.
Expresiones
- Expresiones de PolarsLa API de expresiones que impulsa cada transformación.
- Elegir columnasselect toma expresiones: un conjunto de columnas se describe en vez de enumerarse.
- Agregar columnaswith_columns evalúa expresiones contra el dataframe y devuelve uno nuevo.
- Expresiones condicionaleswhen/then/otherwise es el if vectorizado, y se encadena.
Filtrado y ordenamiento
- Filtrar y seleccionarElegir filas y columnas de un DataFrame.
- Orden y unicidadOrdenar por varias columnas, tomar las filas de arriba o quitar duplicados.
- Manejo de nullsRellenar y descartar valores faltantes en Polars.
Agregación
- Agrupar y agregarResumir grupos con expresiones de agregación.
- Agregar de varias manerasgroup_by().agg() toma una lista de expresiones, cada una con nombre.
- Expresiones de ventanaover calcula por grupo pero conserva cada fila, cosa que agg no hace.
Remodelado y joins
- Joins entre DataFramesCombinar dos frames por una clave compartida.
- Unir por el tiempo más cercanojoin_asof empareja cada fila izquierda con la fila derecha más reciente.
- Pivotearpivot convierte una columna clave en columnas y agrega donde las claves se repiten.
- Despivotearunpivot es el inverso: las columnas anchas se vuelven filas de variable y valor.
- Concatenar dataframesconcat apila dataframes en vertical, o los pega lado a lado.
Texto, listas y structs
- Expresiones de cadenas en PolarsEl espacio de nombres str para columnas de texto en Polars.
- Columnas de listasUna columna puede contener listas, y el espacio de nombres list opera en cada una.
- Columnas structUn struct empaca varios campos en una columna, y unnest los despliega.
Series de tiempo
- Fechas y horasEl espacio de nombres dt hace el trabajo temporal, sobre tipos Date y Datetime reales.
- Agrupar en el tiempogroup_by_dynamic agrupa filas por ventana de tiempo, como un resample.
Lazy y SQL
- Frames perezososDiferir el trabajo para que Polars optimice la consulta completa.
- El motor perezosoUn LazyFrame arma un plan; collect lo corre después de que el optimizador lo reescribe.
- SQL sobre dataframesPolars corre SQL contra dataframes registrados, con planificador y todo.
- Las expresiones le ganan a map_elementsmap_elements cae a Python por fila: correcto, pero es el camino lento.
Lectura y escritura
- Escribir dataframesParquet conserva los tipos; CSV conserva a los lectores; sink transmite a disco.
- Hablar con numpy y pandasArrow por debajo hace baratas las conversiones, y a veces sin copia.
Bis
- pl_sales_report.pyArmar un resumen mensual de ventas desde transacciones crudas.
- pl_pipeline.pyUn pipeline perezoso de Polars: escanear, limpiar, ventanas, agregar, unir y escribir.