Skip to main content

Blazingly fast DataFrame library

Reason this release was yanked:

regression

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 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, and in fact 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

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 --rustc-extra-args="-C target-cpu=native" --release
      
    • Fast binary, Shorter compile times:
      $ cd py-polars && maturin develop --rustc-extra-args="-C codegen-units=16 -C lto=thin -C target-cpu=native" --release
      

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.42.tar.gz (883.6 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.42-cp37-abi3-win_amd64.whl (12.6 MB view details)

Uploaded CPython 3.7+Windows x86-64

polars-0.13.42-cp37-abi3-manylinux_2_24_aarch64.whl (10.4 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.24+ ARM64

polars-0.13.42-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (11.9 MB view details)

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

polars-0.13.42-cp37-abi3-macosx_11_0_arm64.whl (9.7 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

polars-0.13.42-cp37-abi3-macosx_10_7_x86_64.whl (11.4 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

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

File metadata

  • Download URL: polars-0.13.42.tar.gz
  • Upload date:
  • Size: 883.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.12.11-beta.1

File hashes

Hashes for polars-0.13.42.tar.gz
Algorithm Hash digest
SHA256 667cdfd54eb3a8464f700dec9777c015022a7e6b7d6d25b02df138fc4bab39ee
MD5 51d1705ab88b34f320f3b18b341b9bc4
BLAKE2b-256 ea9223592ca01076fe96a08c0167b6e3f7633f45c1d7aaa2cc1970a05bc77e69

See more details on using hashes here.

File details

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

File metadata

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

File hashes

Hashes for polars-0.13.42-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 313976478f08ba9b5a04cf9e4e83bab06bb863cd013b4a469a1d4464203fecfc
MD5 cdfeaced73158f26efa50537deedf455
BLAKE2b-256 fc0a5c0c55b4259a9ddf2b9b5228e4766b065436d57353e2aa38b0e49bc379a7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.42-cp37-abi3-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 0e112de87f014c49345d769e6457eaea3ef7cecac2aa7658e44a0ff412de6f1a
MD5 72827d1cb594e2176a0701aabfe32dc6
BLAKE2b-256 df6dc70c90ddf854fa0adcd176e537437ca24bf80f17944c4f9d7c78b9c8d840

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.42-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 3e85edda794caba4395da0a36e7e42728628a77116b04b6540c4eb7250a5477f
MD5 8f62bc44012b593e2ada047ba5c31b98
BLAKE2b-256 3d0c62fc01fc924364c1ae82a4d92c088a2f8157d1eea85c3edbeecdde2b395e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.42-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 c44709a90dd597bdca35ab9f93fec11c323e5f04619e46396f506022ea851496
MD5 69fbf1a046816d9fb1e15a286ba00433
BLAKE2b-256 3b1a11600adac3895d59bb96fa7d0bc77eab4fe1864be44c7c380c4336a14fad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.42-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 de55c2e8a7e7d098bcbcc75af09833b0f4d56ba20c13b4f509e0c64938230690
MD5 9a9ccc412195f20a09a6fc769c2824e6
BLAKE2b-256 485a7ae964bf1499e23cadfd8a4794c8692428d622b1bbbec4edf3ed9d4b5921

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