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.

Use custom Rust function in python?

See this example.

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.14.tar.gz (789.2 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.14-cp37-abi3-win_amd64.whl (11.1 MB view details)

Uploaded CPython 3.7+Windows x86-64

polars-0.13.14-cp37-abi3-manylinux_2_24_aarch64.whl (9.2 MB view details)

Uploaded CPython 3.7+manylinux: glibc 2.24+ ARM64

polars-0.13.14-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (10.6 MB view details)

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

polars-0.13.14-cp37-abi3-macosx_11_0_arm64.whl (8.7 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

polars-0.13.14-cp37-abi3-macosx_10_7_x86_64.whl (10.3 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars-0.13.14.tar.gz
Algorithm Hash digest
SHA256 bdd15daae10b7cf8114cff893c862c8960ef7fc9965257d7e81b52244f4e299a
MD5 c4fdf2ecf3549e55faf0ba95d8a95e34
BLAKE2b-256 e4c3106fcd39244830f917c2e7c20b0986a6f3d2aae5e9ed7165d085a4a2f48c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: polars-0.13.14-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 11.1 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.14-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 6bc45ed24068a56c2d38fd5b8205f8583b1fedc2c609ad9c526f35f3af9eed63
MD5 556f5ee0cd275b803cf697324c77b388
BLAKE2b-256 d30ce404fbb1baba3c4c7b9901e0b2e27620a032fb357eee9d36276941eca9e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.14-cp37-abi3-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 d66fcf3b71c35a08c083d493c3137da95df0600cddee70f0064eca25161ea4f6
MD5 1752c435b70b6a741ad55dd45f185331
BLAKE2b-256 2437760d306c7cebf73bf089074ea711f8df16889102912f373b66d2b43f27f6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.14-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 6f4720091e2d9e29b3e546991464b5e16802aef642aeaf8ee16fe3d335f26cff
MD5 b0263d100a7cf7f8aa7e6d81bcae783c
BLAKE2b-256 9094fcf3e57cc393fc5b36c16a78f07b3d5b34611ec245c64e71b25fafeac66c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.14-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 83ed3f1a41a71fd2971915b0708bf6cea5b1851a065be081d119983e68fb3115
MD5 39e415ec0768ff528fe742948b32d597
BLAKE2b-256 ab1d9198080b6782d3cb0df3449bfa429e4e509921382a86c866965e9c508453

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.14-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 0e15fe0b89b5ee63308775e34615df2e75f74876654cb202262b7a75f520d62f
MD5 562d392556f597911d4e82dbf3dd4c54
BLAKE2b-256 24b2816904211af2628a4f3b64d8f9504d2b6930c4735647f907e0a7942f7f98

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