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.16.tar.gz (783.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.13.16-cp37-abi3-win_amd64.whl (11.2 MB view details)

Uploaded CPython 3.7+Windows x86-64

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

Uploaded CPython 3.7+manylinux: glibc 2.24+ ARM64

polars-0.13.16-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.16-cp37-abi3-macosx_11_0_arm64.whl (8.8 MB view details)

Uploaded CPython 3.7+macOS 11.0+ ARM64

polars-0.13.16-cp37-abi3-macosx_10_7_x86_64.whl (10.4 MB view details)

Uploaded CPython 3.7+macOS 10.7+ x86-64

File details

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

File metadata

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

File hashes

Hashes for polars-0.13.16.tar.gz
Algorithm Hash digest
SHA256 5aad55a92d512630378c26f6b8d9232f1544a8002ceecbb7ab5bffc2981a470d
MD5 ccd53cd1bb0dbf273c795ee406426847
BLAKE2b-256 045ef72538f74ed045bf7445b8c8ed87829581e6342d0861f615538d415a1238

See more details on using hashes here.

File details

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

File metadata

  • Download URL: polars-0.13.16-cp37-abi3-win_amd64.whl
  • Upload date:
  • Size: 11.2 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.16-cp37-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 c5638218bb3aae0d107b8c75ee3f697df57752faadc2f4fd1583aabdf369cb4f
MD5 a48948b8ade607a45744d01e193d2edc
BLAKE2b-256 e9b4182b2c223403c57b804b67a2101bd6bd5646861d0d2e9551c90bd4a689b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.16-cp37-abi3-manylinux_2_24_aarch64.whl
Algorithm Hash digest
SHA256 7e0e02e7e77fd0c35c1cfeac45d5ea03bd2229d3c63ac24a1094582247072af3
MD5 10c7fca04c75690a0237804f8be1d55e
BLAKE2b-256 aff161c01fb17f6d0c810264a0b7811af0106456ebe2095c6c251ca5d7ac0d7e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.16-cp37-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl
Algorithm Hash digest
SHA256 e13e6d90c1b4ac03551426e4dacf0311978c638eadcad5f48387b73464569db5
MD5 75b33cda4b11552b36f83747601c9d90
BLAKE2b-256 030a7f2c30ebd7e0dcea85faa0f5ed5d2ead465f438ff5300ae79efba2ec1114

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.16-cp37-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ded09c09196fff0d9df7d6c84c5536765d69319e4a25489be9171bb88724b67b
MD5 4a101cacf70981f4635150b6f1bad8fd
BLAKE2b-256 77bec399fda06de689e224c632a8dadbc37784c73127a318c24b2583b9bad583

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for polars-0.13.16-cp37-abi3-macosx_10_7_x86_64.whl
Algorithm Hash digest
SHA256 50377d2a9d91b627095b9652d21b3acd9e7ef56845a3805df0455180738b70f4
MD5 e8b0f89479bd936f1bc99540080ab57f
BLAKE2b-256 7e6d78dd93be436051a27ae8e4d4e0133c8f1e391f02698c0833e67a9600e525

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