Skip to main content

Blazingly fast DataFrame library

Project description

Polars

rust docs Build and test PyPI Latest Release NPM Latest Release

Python Documentation | Rust Documentation | User Guide | Discord | StackOverflow

Blazingly fast DataFrames in Rust, Python & Node.js

Polars is a blazingly fast DataFrames library implemented in Rust using Apache Arrow Columnar Format as the memory model.

  • Lazy | eager execution
  • Multi-threaded
  • SIMD
  • Query optimization
  • Powerful expression API
  • Rust | Python | ...

To learn more, read the User Guide.

>>> 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"),     # groups by "cars"
...             pl.col("A").sum().over("fruits").alias("sum_A_by_fruits"),                         # groups by "fruits"
...             pl.col("A").reverse().over("fruits").alias("rev_A_by_fruits"),                     # groups by "fruits
...             pl.col("A").sort_by("B").over("fruits").alias("sort_A_by_B_by_fruits"),            # groups 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           
└──────────┴──────────┴──────────────┴─────┴─────────────┴─────────────┴─────────────┴─────────────┘

Performance 🚀🚀

Polars is very fast. In fact, it is one of the best performing solutions available. See the results in h2oai's db-benchmark.

Python setup

Install the latest polars version with:

$ pip3 install -U 'polars[pyarrow]'

Releases happen quite often (weekly / every few days) at the moment, so updating polars regularly to get the latest bugfixes / features might not be a bad idea.

Rust setup

You can take latest release from crates.io, or if you want to use the latest features / performance improvements point to the master branch of this repo.

polars = { git = "https://github.com/pola-rs/polars", rev = "<optional git tag>" }

Rust version

Required Rust version >=1.58

Documentation

Want to know about all the features Polars supports? Read the docs!

Python

Rust

Node

Contribution

Want to contribute? Read our contribution guideline.

[Python]: compile polars from source

If you want a bleeding edge release or maximal performance you should compile polars from source.

This can be done by going through the following steps in sequence:

  1. Install the latest Rust compiler
  2. Install maturin: $ pip3 install maturin
  3. Choose any of:
    • Fastest binary, very long compile times:
      $ cd py-polars && maturin develop --release -- -C target-cpu=native
      
    • Fast binary, Shorter compile times:
      $ cd py-polars && maturin develop --release -- -C codegen-units=16 -C lto=thin -C target-cpu=native
      

Note that the Rust crate implementing the Python bindings is called py-polars to distinguish from the wrapped Rust crate polars itself. However, both the Python package and the Python module are named polars, so you can pip install polars and import polars.

Arrow2

Polars has transitioned to arrow2. Arrow2 is a faster and safer implementation of the Apache Arrow Columnar Format. Arrow2 also has a more granular code base, helping to reduce the compiler bloat.

Use custom Rust function in python?

See this example.

Going big...

Do you expect more than 2^32 ~4,2 billion rows? Compile polars with the bigidx feature flag.

Or for python users install $ pip install -U polars-u64-idx.

Don't use this unless you hit the row boundary as the default polars is faster and consumes less memory.

Acknowledgements

Development of Polars is proudly powered by

Xomnia

Sponsors

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

polars-0.13.62.tar.gz (985.3 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

polars-0.13.62-cp37-abi3-win_amd64.whl (13.5 MB view details)

Uploaded CPython 3.7+Windows x86-64

polars-0.13.62-cp37-abi3-manylinux_2_24_aarch64.whl (11.4 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.24+ ARM64

polars-0.13.62-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (13.0 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.12+ x86-64

polars-0.13.62-cp37-abi3-macosx_11_0_arm64.whl (10.5 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

polars-0.13.62-cp37-abi3-macosx_10_7_x86_64.whl (12.3 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

Details for the file polars-0.13.62.tar.gz.

File metadata

  • Download URL: polars-0.13.62.tar.gz
  • Upload date:
  • Size: 985.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.13.2-beta.2

File hashes

Hashes for polars-0.13.62.tar.gz
Algorithm Hash digest
SHA256 b66a5e37802c4e519b4ea63932bd42afe273046188de0e57373819860c8784fc
MD5 0a8f1fc5613d0619e41e9a75a1f23976
BLAKE2b-256 7206773a9fd54259ac2f1b5a69ceecc752d11a43825819976cbe15a20822235d

See more details on using hashes here.

File details

Details for the file polars-0.13.62-cp37-abi3-win_amd64.whl.

File metadata

  • Download URL: polars-0.13.62-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 13.5 MB
  • Tags: CPython 3.7+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.13.0

File hashes

Hashes for polars-0.13.62-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6b91335ef87491bbf71630ad12a38a617f7964c3606c317f601ee3e231bcfda4
MD5 d784d804e34d1fe583c3b42c11929381
BLAKE2b-256 451bc44ebaa149cd01ad366e5695aa4f4d3bcc5837baa60eb457c02403c5213e

See more details on using hashes here.

File details

Details for the file polars-0.13.62-cp37-abi3-manylinux_2_24_aarch64.whl.

File metadata

File hashes

Hashes for polars-0.13.62-cp37-abi3-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 9daeb8e68e97e4133e3acd7a78827bf17a733863882f8d60f93b665d3685f73c
MD5 75fffa03e235de91479dcad592d701a5
BLAKE2b-256 8067b24a15f025098cccf87899f745b1c12b3509b169ac566d3736e601be2daf

See more details on using hashes here.

File details

Details for the file polars-0.13.62-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for polars-0.13.62-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 b3058ea18d33525feb87bace0f34bac3d3c7badc6d3317c844fc5feba20c1ec2
MD5 d3cf86f5eb63529365e7b7ca96a9afd3
BLAKE2b-256 9c9fb225850e1db31067817450b0f32bb3b72909eb78225b7363df19912df741

See more details on using hashes here.

File details

Details for the file polars-0.13.62-cp37-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polars-0.13.62-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9a9dd30b06fe9806b456ca6a6d78c96f06d757a39bcf787159895c81df5b233f
MD5 61b2b523fff56cebfe16649962044791
BLAKE2b-256 59652d9c4ea5e46264f31b77310b98e0bffe7eec26a6c90b03d945e9857bc6bd

See more details on using hashes here.

File details

Details for the file polars-0.13.62-cp37-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for polars-0.13.62-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 9ce7c7a32b4d848a66eef4e4aec5b38b0ba86a2e69532b1fd2c030bc17d8b942
MD5 124904b82aff4a06bffefeb4e2cee05c
BLAKE2b-256 4acce3e9f5aa55fa4aab0ab8358a3a063f1b660aef15be38233bf62fb1d049a2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page