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 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").flatten().alias("rev_A_by_fruits"),           # groups by "fruits
...             pl.col("A").sort_by("B").over("fruits").flatten().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 polars

Update existing polars installation to the lastest version with:

$ pip3 install -U polars

Releases happen quite often (weekly / every few days) at the moment, so updating polars regularily 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.

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.12.23.tar.gz (720.1 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.12.23-cp36-abi3-win_amd64.whl (10.4 MB view details)

Uploaded CPython 3.6+Windows x86-64

polars-0.12.23-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (10.1 MB view details)

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

polars-0.12.23-cp36-abi3-macosx_11_0_arm64.whl (8.2 MB view details)

Uploaded CPython 3.6+macOS 11.0+ ARM64

polars-0.12.23-cp36-abi3-macosx_10_7_x86_64.whl (9.9 MB view details)

Uploaded CPython 3.6+macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars-0.12.23.tar.gz
Algorithm Hash digest
SHA256 b653747979f90557ee1fb5622778582ef54054a9f558033a32c74c458b07572c
MD5 9647edde750be4a7603622f747877beb
BLAKE2b-256 35e511194dbda5de15b389da92d02bae0463d533925e67cb74a17ab5ab01ee44

See more details on using hashes here.

File details

Details for the file polars-0.12.23-cp36-abi3-win_amd64.whl.

File metadata

  • Download URL: polars-0.12.23-cp36-abi3-win_amd64.whl
  • Upload date:
  • Size: 10.4 MB
  • Tags: CPython 3.6+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/0.12.1

File hashes

Hashes for polars-0.12.23-cp36-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 1f1baa6d8c19cda59306248984d5d1cc8e7f5c24bc952a2f6ab5bdbccaabcab6
MD5 8f4a0b3c95b0b6104e4438b2554e4cba
BLAKE2b-256 f45b722304470e6a3085ff256ee336cfc1729ce27088d29ea683bd4ba745d65c

See more details on using hashes here.

File details

Details for the file polars-0.12.23-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl.

File metadata

File hashes

Hashes for polars-0.12.23-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 5bf76a3235758ba1bb5d4824793c5c6f0b997f824d4d87d1809c7d9fc71f3676
MD5 3541ef902c65d8c030e8182a1570bfd8
BLAKE2b-256 e973d3d19e54568d3289e8f6c470a4b2956e7b28e0de4596961a02b98179cb37

See more details on using hashes here.

File details

Details for the file polars-0.12.23-cp36-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for polars-0.12.23-cp36-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 483cc5238430d91ce80ec549e9008724df91b10d141d4fc423617397650be412
MD5 d7e379d986d1a935d94adb172f56c1f5
BLAKE2b-256 4595b3ee00c266574252f86915d3520a2ef25d5365b550a818e9e43ef3e1a0ee

See more details on using hashes here.

File details

Details for the file polars-0.12.23-cp36-abi3-macosx_10_7_x86_64.whl.

File metadata

File hashes

Hashes for polars-0.12.23-cp36-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 5e7aa69439d4fd6bce8cf6f3523c465061c07c212933b0a8b16b8382e4b2b03c
MD5 4ade664e247eeb2a400d3cd782c7970e
BLAKE2b-256 89fd7701f3f2b8dbb222527c0ca18793a93ad3190b4881e25615396b58c1a084

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