Curso
En el mundo del análisis de datos, Python es un lenguaje muy popular por su versatilidad y su amplio ecosistema de librerías. La manipulación y el análisis de datos son clave para extraer insights y tomar decisiones informadas. Sin embargo, a medida que los conjuntos de datos crecen en tamaño y complejidad, la necesidad de soluciones de alto rendimiento se vuelve crucial.
Trabajar con grandes volúmenes de datos de forma eficiente requiere herramientas capaces de ofrecer cálculos rápidos y operaciones optimizadas. Aquí es donde entra en juego Polars. Polars es una potente librería open source diseñada específicamente para la manipulación y el análisis de datos de alto rendimiento en Python.
Funciones de Polars
Polars es una librería de DataFrame escrita íntegramente en Rust y creada para que los desarrolladores de Python dispongan de un marco escalable y eficiente para trabajar con datos. Se considera una alternativa a la popular librería pandas. Ofrece un amplio abanico de funcionalidades que facilitan diversas tareas de manipulación y análisis de datos. Entre sus principales características y ventajas destacan:
1. Velocidad y rendimiento
Polars está diseñado con el rendimiento en mente. Aprovecha el procesamiento en paralelo y técnicas de optimización de memoria, lo que le permite procesar grandes conjuntos de datos mucho más rápido que los métodos tradicionales.
2. Capacidades de manipulación de datos
Polars proporciona un conjunto muy completo para la manipulación de datos, que incluye operaciones esenciales como filtrar, ordenar, agrupar, unir y agregar datos. Aunque por su relativa novedad Polars no tiene aún tantas funcionalidades como pandas, cubre aproximadamente el 80% de las operaciones más habituales.
3. Sintaxis expresiva
Polars emplea una sintaxis concisa e intuitiva, fácil de aprender y usar. Su sintaxis recuerda a la de librerías populares de Python como pandas, por lo que podrás adaptarte rápido y aprovechar tu conocimiento previo.
4. Estructuras DataFrame y Series
En el núcleo de Polars están las estructuras DataFrame y Series, que ofrecen una abstracción potente y familiar para trabajar con datos tabulares. Las operaciones sobre DataFrame en Polars se pueden encadenar, lo que permite transformaciones eficientes y concisas.
5. Evaluación perezosa (lazy)
Polars incorpora evaluación perezosa: examina y optimiza las consultas para mejorar su rendimiento y reducir el consumo de memoria. Al trabajar con Polars, la librería analiza tus consultas y busca oportunidades para acelerar la ejecución o disminuir el uso de memoria. En cambio, pandas solo admite evaluación ansiosa (eager), es decir, evalúa las expresiones en cuanto las encuentra.
¿Por qué elegir Polars si ya tenemos pandas?
pandas, una librería ampliamente adoptada, es conocida por su flexibilidad y facilidad de uso. No obstante, al trabajar con grandes volúmenes de datos, pandas puede sufrir cuellos de botella de rendimiento por su ejecución monohilo. A medida que crece el tamaño del dataset, los tiempos de procesamiento pueden volverse excesivos y mermar la productividad.
Polars se ha diseñado específicamente para manejar grandes conjuntos de datos de forma eficiente. Gracias a su estrategia de evaluación perezosa y a su capacidad de ejecución en paralelo, Polars destaca por procesar grandes volúmenes de datos con rapidez. Al distribuir los cálculos entre varios núcleos de CPU, Polars aprovecha el paralelismo para lograr mejoras de rendimiento notables. Consulta la prueba de comparación de velocidad entre pandas y Polars realizada por Yuki.

Para una comparación completa de Polars vs. pandas, echa un vistazo a nuestro artículo específico.
Instalar Polars
Puedes instalar Polars con pip, el gestor de paquetes de Python. Abre la línea de comandos y ejecuta:
install polars
Cargar un conjunto de datos en Polars
Polars ofrece métodos prácticos para cargar datos desde varias fuentes, incluidos archivos CSV, archivos Parquet y DataFrames de pandas. Los métodos para leer CSV o Parquet son los mismos que en la librería pandas.
# read csv file
import polars as pl
data = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# check the head
data.head()
Salida:

El tipo de data es polars.DataFrame.
type(data)
>>> polars.dataframe.frame.DataFrame
Salida:

Funciones comunes de manipulación de datos con Polars
Polars ofrece un conjunto completo de funciones para manipular datos, que te permite seleccionar, filtrar, ordenar, transformar y limpiar tus datos con facilidad. Veamos algunas tareas habituales de manipulación de datos y cómo realizarlas con Polars:
1. Seleccionar y filtrar datos
Para seleccionar columnas específicas de un DataFrame, puedes usar el método select(). Aquí tienes un ejemplo:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# Select specific columns: carat, cut, and price
selected_df = df.select(['Carat Weight', 'Cut', 'Price'])
# show selected_df head
selected_df.head()
Salida:

Para filtrar filas según ciertas condiciones, utiliza el método filter(). Por ejemplo, para filtrar filas donde el quilataje sea mayor que 1.0, puedes hacer lo siguiente:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# filter the df with condition
filtered_df = df.filter(pl.col('Carat Weight') > 2.0)
# show filtered_df head
filtered_df.head()
Salida:

2. Ordenar y clasificar datos
Polars cuenta con el método sort() para ordenar un DataFrame por una o varias columnas. Ejemplo:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# sort the df by price
sorted_df = df.sort(by='Price')
# show sorted_df head
sorted_df.head()
Salida:

3. Gestión de valores ausentes
Polars ofrece métodos prácticos para tratar valores ausentes. El método drop_nulls() permite eliminar filas que contengan cualquier valor faltante:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# drop missing values
cleaned_df = df.drop_nulls()
# show cleaned_df head
cleaned_df.head()
Salida:

Alternativamente, puedes usar el método fill_nulls() para reemplazar valores ausentes por un valor por defecto o mediante un método de imputación.
4. Agrupar datos por columnas específicas
Para agrupar datos por columnas concretas, utiliza el método groupby(). En este ejemplo agrupamos por la columna Cut y calculamos el Price medio de cada grupo:
import polars as pl
# Load diamond data from a CSV file
df = pl.read_csv('https://raw.githubusercontent.com/pycaret/pycaret/master/datasets/diamond.csv')
# group by cut and calc mean of price
grouped_df = df.groupby(by='Cut').agg(pl.col('Price').mean())
# show grouped_df head
grouped_df.head()
Salida:

En la salida anterior puedes ver el precio medio de los diamantes según la dimensión Cut.
5. Unir y combinar DataFrames
Polars ofrece opciones flexibles para unir y combinar DataFrames, de modo que puedas fusionar y concatenar datos de distintas fuentes. Para realizar una unión, utiliza el método join(). Este ejemplo muestra un inner join entre dos DataFrames basado en una columna clave común:
import polars as pl
# Create the first DataFrame
df1 = pl.DataFrame({
'id': [1, 2, 3, 4],
'name': ['Alice', 'Bob', 'Charlie', 'David']
})
# Create the second DataFrame
df2 = pl.DataFrame({
'id': [2, 3, 5],
'age': [25, 30, 35]
})
# Perform an inner join on the 'id' column
joined_df = df1.join(df2, on='id')
# Display the joined DataFrame
joined_df
Salida:

En este ejemplo creamos dos DataFrames (df1 y df2) con el constructor pl.DataFrame. El primero, df1, contiene las columnas id y name; el segundo, df2, contiene id y age. Después realizamos un inner join sobre la columna id con el método join(), indicando id como clave de unión.
Integración e interoperabilidad
Polars se integra sin problemas con otras librerías populares de Python, lo que permite a los analistas aprovechar un abanico amplio de herramientas y funcionalidades. Veamos dos aspectos clave: trabajar con otras librerías e interoperar con pandas.
Integrar Polars con otras librerías de Python
Polars se integra fácilmente con librerías como NumPy y PyArrow, lo que permite combinar las fortalezas de varias herramientas en tus flujos de análisis. Con la integración con NumPy, Polars convierte sin esfuerzo entre DataFrames de Polars y arrays de NumPy, aprovechando la potencia de cálculo científico de NumPy. Esta integración garantiza transiciones de datos fluidas y te permite aplicar funciones de NumPy directamente sobre datos de Polars.
Asimismo, al aprovechar PyArrow, Polars optimiza la transferencia de datos entre Polars y sistemas basados en Arrow. Esta integración facilita trabajar con datos almacenados en formato Arrow y saca partido de las capacidades de manipulación de datos de alto rendimiento de Polars.
Convertir DataFrames de Polars a DataFrames de pandas
Polars permite convertir DataFrames de Polars a DataFrames de pandas de forma sencilla. Aquí tienes un ejemplo que ilustra la conversión de Polars a pandas.
import polars as pl
import pandas as pd
# Create a Polars DataFrame
df_polars = pl.DataFrame({
'column_A': [1, 2, 3],
'column_B': ['apple', 'banana', 'orange']
})
# Convert Polars DataFrame to Pandas DataFrame
df_pandas = df_polars.to_pandas()
# Display the Pandas DataFrame
df_pandas
Salida:

Conclusión
Polars es una librería potente para la manipulación y el análisis de datos de alto rendimiento en Python. Su velocidad y optimizaciones de rendimiento la convierten en una opción ideal para trabajar con grandes volúmenes de datos de forma eficiente.
Con su sintaxis expresiva y sus estructuras DataFrame, Polars ofrece una interfaz familiar e intuitiva para las tareas de manipulación de datos. Además, se integra sin fricciones con otras librerías de Python como NumPy y PyArrow, ampliando sus capacidades y permitiéndote aprovechar un ecosistema diverso de herramientas.
La posibilidad de convertir DataFrames de Polars a DataFrames de pandas garantiza la interoperabilidad y facilita integrar Polars en flujos de trabajo existentes. Tanto si trabajas con tipos de datos complejos, gestionas grandes datasets o buscas mejorar el rendimiento, Polars te ofrece un conjunto de herramientas completo para liberar todo el potencial de tu análisis de datos.
