Documentación : Python - Rust - Node.js - R | StackOverflow : Python - Rust - Node.js - R | Guía del usuario | Discordia
Polars es una interfaz DataFrame sobre un motor de consulta OLAP implementado en Rust utilizando el formato columnar Apache Arrow como modelo de memoria.
Para obtener más información, lea la guía del usuario.
>> > import polars as pl
>> > df = pl . DataFrame (
... {
... "A" : [ 1 , 2 , 3 , 4 , 5 ],
... "fruits" : [ "banana" , "banana" , "apple" , "apple" , "banana" ],
... "B" : [ 5 , 4 , 3 , 2 , 1 ],
... "cars" : [ "beetle" , "audi" , "beetle" , "beetle" , "beetle" ],
... }
... )
# embarrassingly parallel execution & very expressive query language
>> > df . sort ( "fruits" ). select (
... "fruits" ,
... "cars" ,
... pl . lit ( "fruits" ). alias ( "literal_string_fruits" ),
... pl . col ( "B" ). filter ( pl . col ( "cars" ) == "beetle" ). sum (),
... pl . col ( "A" ). filter ( pl . col ( "B" ) > 2 ). sum (). over ( "cars" ). alias ( "sum_A_by_cars" ),
... pl . col ( "A" ). sum (). over ( "fruits" ). alias ( "sum_A_by_fruits" ),
... pl . col ( "A" ). reverse (). over ( "fruits" ). alias ( "rev_A_by_fruits" ),
... pl . col ( "A" ). sort_by ( "B" ). over ( "fruits" ). alias ( "sort_A_by_B_by_fruits" ),
... )
shape : ( 5 , 8 )
┌──────────┬──────────┬──────────────┬─────┬─────────────┬─────────────┬─────────────┬─────────────┐
│ fruits ┆ cars ┆ literal_stri ┆ B ┆ sum_A_by_ca ┆ sum_A_by_fr ┆ rev_A_by_fr ┆ sort_A_by_B │
│ - - - ┆ - - - ┆ ng_fruits ┆ - - - ┆ rs ┆ uits ┆ uits ┆ _by_fruits │
│ str ┆ str ┆ - - - ┆ i64 ┆ - - - ┆ - - - ┆ - - - ┆ - - - │
│ ┆ ┆ str ┆ ┆ i64 ┆ i64 ┆ i64 ┆ i64 │
╞══════════╪══════════╪══════════════╪═════╪═════════════╪═════════════╪═════════════╪═════════════╡
│ "apple" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 7 ┆ 4 ┆ 4 │
│ "apple" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 7 ┆ 3 ┆ 3 │
│ "banana" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 8 ┆ 5 ┆ 5 │
│ "banana" ┆ "audi" ┆ "fruits" ┆ 11 ┆ 2 ┆ 8 ┆ 2 ┆ 2 │
│ "banana" ┆ "beetle" ┆ "fruits" ┆ 11 ┆ 4 ┆ 8 ┆ 1 ┆ 1 │
└──────────┴──────────┴──────────────┴─────┴─────────────┴─────────────┴─────────────┴─────────────┘
>> > df = pl . scan_csv ( "docs/assets/data/iris.csv" )
>> > ## OPTION 1
>> > # run SQL queries on frame-level
>> > df . sql ( """
... SELECT species,
... AVG(sepal_length) AS avg_sepal_length
... FROM self
... GROUP BY species
... """ ). collect ()
shape : ( 3 , 2 )
┌────────────┬──────────────────┐
│ species ┆ avg_sepal_length │
│ - - - ┆ - - - │
│ str ┆ f64 │
╞════════════╪══════════════════╡
│ Virginica ┆ 6.588 │
│ Versicolor ┆ 5.936 │
│ Setosa ┆ 5.006 │
└────────────┴──────────────────┘
>> > ## OPTION 2
>> > # use pl.sql() to operate on the global context
>> > df2 = pl . LazyFrame ({
... "species" : [ "Setosa" , "Versicolor" , "Virginica" ],
... "blooming_season" : [ "Spring" , "Summer" , "Fall" ]
...})
>> > pl . sql ( """
... SELECT df.species,
... AVG(df.sepal_length) AS avg_sepal_length,
... df2.blooming_season
... FROM df
... LEFT JOIN df2 ON df.species = df2.species
... GROUP BY df.species, df2.blooming_season
... """ ). collect ()
Los comandos SQL también se pueden ejecutar directamente desde su terminal usando la CLI de Polars:
# run an inline SQL query
> polars -c " SELECT species, AVG(sepal_length) AS avg_sepal_length, AVG(sepal_width) AS avg_sepal_width FROM read_csv('docs/assets/data/iris.csv') GROUP BY species; "
# run interactively
> polars
Polars CLI v0.3.0
Type .help for help.
> SELECT species, AVG(sepal_length) AS avg_sepal_length, AVG(sepal_width) AS avg_sepal_width FROM read_csv( ' docs/assets/data/iris.csv ' ) GROUP BY species ;
Consulte el repositorio CLI de Polars para obtener más información.
Los polares son muy rápidos. De hecho, es una de las soluciones de mejor rendimiento disponibles. Vea los resultados de las pruebas comparativas de PDS-H.
Polars también es muy ligero. Viene sin dependencias requeridas, y esto se muestra en los tiempos de importación:
Si tiene datos que no caben en la memoria, el motor de consultas de Polars puede procesar su consulta (o partes de su consulta) en forma de transmisión. Esto reduce drásticamente los requisitos de memoria, por lo que es posible que pueda procesar su conjunto de datos de 250 GB en su computadora portátil. Collect con collect(streaming=True)
para ejecutar la consulta en streaming. (¡Esto puede ser un poco más lento, pero sigue siendo muy rápido!)
Instale la última versión de Polars con:
pip install polars
También tenemos un paquete conda ( conda install -c conda-forge polars
), sin embargo, pip es la forma preferida de instalar Polars.
Instale Polars con todas las dependencias opcionales.
pip install ' polars[all] '
También puede instalar un subconjunto de todas las dependencias opcionales.
pip install ' polars[numpy,pandas,pyarrow] '
Consulte la Guía del usuario para obtener más detalles sobre las dependencias opcionales.
Para ver la versión actual de Polars y una lista completa de sus dependencias opcionales, ejecute:
pl . show_versions ()
Los lanzamientos ocurren con bastante frecuencia (semanalmente/cada pocos días) en este momento, por lo que actualizar Polars regularmente para obtener las últimas correcciones de errores/funciones puede no ser una mala idea.
Puede obtener la última versión de crates.io
, o si desea utilizar las últimas funciones/mejoras de rendimiento, diríjase a la rama main
de este repositorio.
polars = { git = " https://github.com/pola-rs/polars " , rev = " <optional git tag> " }
Requiere la versión Rust >=1.80
.
¿Quieres contribuir? Lea nuestra guía de contribución.
Si desea una versión de vanguardia o un rendimiento máximo, debe compilar Polars desde la fuente.
Esto se puede hacer siguiendo los siguientes pasos en secuencia:
pip install maturin
cd py-polars
y elija uno de los siguientes:make build
, binario lento con afirmaciones y símbolos de depuración, tiempos de compilación rápidosmake build-release
, binario rápido sin aserciones de depuración, símbolos de depuración mínimos, tiempos de compilación prolongadosmake build-nodebug-release
, igual que build-release pero sin ningún símbolo de depuración, un poco más rápido de compilarmake build-debug-release
, igual que build-release pero con símbolos de depuración completos, un poco más lento de compilarmake build-dist-release
, binario más rápido, tiempos de compilación extremos De forma predeterminada, el binario se compila con optimizaciones activadas para una CPU moderna. Especifique LTS_CPU=1
con el comando si su CPU es más antigua y no es compatible, por ejemplo, con AVX2.
Tenga en cuenta que la caja Rust que implementa los enlaces de Python se llama py-polars
para distinguirla de los polars
envueltos de la caja Rust. Sin embargo, tanto el paquete de Python como el módulo de Python se denominan polars
, por lo que puedes pip install polars
e import polars
.
Extender Polars con UDF compiladas en Rust es fácil. Exponemos extensiones de PyO3 para estructuras de datos DataFrame
y Series
. Ver más en https://github.com/pola-rs/pyo3-polars.
¿Espera más de 2^32 (~4,2 mil millones) filas? Compile Polars con el indicador de función bigidx
o, para usuarios de Python, instale pip install polars-u64-idx
.
No use esto a menos que alcance el límite de la fila, ya que la compilación predeterminada de Polars es más rápida y consume menos memoria.
¿Quiere que Polars se ejecute en una CPU antigua (por ejemplo, anterior a 2011) o en una compilación x86-64
de Python en Apple Silicon bajo Rosetta? Instale pip install polars-lts-cpu
. Esta versión de Polars está compilada sin funciones de destino AVX.