Polarsは、データ操作のためのオープンソースソフトウェアライブラリです。Polarsは、 Apache Arrow Columnar Formatをメモリモデルとして使用し、 Rustで実装されたOLAPクエリエンジンで構築されています。Rustで構築されていますが、 Polarsを使用するためのPython、Node.js、R、およびSQL APIインターフェースも提供されています。
2025年9月現在、Polarsは月間2400万回以上のダウンロード数[ 1 ] [ 2 ]、累計ダウンロード数は2億5000万回を超えています[ 3 ] 。
最初のコードコミットは2020年6月23日でした。[ 4 ] Polarsは、データの整理と操作に使用されるソフトウェアツールpandasの制限に動機づけられたRitchie Vinkによる「個人的なプロジェクト」として始まりました。Vinkは、Rustプログラミング言語で書かれたデータ処理ライブラリでこれらの制限に対処することを目指しました。[ 5 ] [ 2 ]
リッチー・ヴィンクとチエル・ピーターズは、Xomnia社で5年間共に働いた後、Polarsを開発するために同名の会社を共同設立した。2023年、ヴィンクとピーターズは、ベイン・キャピタル・ベンチャーズが主導する約400万ドルのシードラウンドを成功裏に完了した。[ 2 ] [ 6 ]
2025年9月、ヴィンクとピーターズは、アクセルが主導し、ベインキャピタルパートナーズやエンジェル投資家も参加したシリーズAラウンドで1800万ユーロ(約2100万米ドル)を調達した。 [ 2 ]
VinkとPetersは、Polarsを基盤としたPolars CloudやPolars Distributedなどの他のサービスも開発している。[ 2 ]
Polars の中核となるオブジェクトは、他のデータ処理ソフトウェアライブラリと同様に DataFrame です。[ 7 ]コンテキストと式は、Polars の構文において重要な概念です。コンテキストとは、式が評価される特定の環境のことです。一方、式とは、データ列に対して実行される計算または変換を指します。
Polarsには主に3つの文脈があります。
Polarsは「直感的で、データ処理タスクのための簡潔な構文を持つ」ように設計されました。[ 8 ]
Polarsは単一のマシン上で動作するように設計されているため、同様のデータ操作ソフトウェアであるpandasとの比較が多くなされています。[ 9 ] Polarsがpandasよりも優れている大きな利点の1つはパフォーマンスで、同様のタスクではPolarsはpandasよりも5~10倍高速です。さらに、pandasはデータセットのサイズの約5~10倍のRAMを必要としますが、Polarsでは2~4倍で済みます。これらのパフォーマンスの向上は、PolarsがRustで記述され、並列処理をサポートしていることによるものと考えられます。[ 10 ]
Polars は、pandas が即時評価(ステップがすぐに実行される)を使用するのに対し、遅延評価(クエリ最適化ツールがすべてのステップを確認した後で最も効率的な評価を使用する) を使用するように設計されています。データ分析タスクを完了する pandas と Polars を比較したいくつかの研究では、Polars は pandas よりもメモリ効率が高く、「Polars は TPC-H ベンチマークで pandas が必要とするエネルギーの 63% を消費し、合成データでは pandas の 8 分の 1 のエネルギーしか消費しない」ことが示されています。[ 11 ]
PolarsにはDataFrameオブジェクト用のインデックスがなく、これはpandasのインデックスの使用とは対照的である。[ 10 ]
Polarsとpandasは、メソッドを使用してデータを読み込む構文は似ていますread_csv()が、移動平均を計算する構文は異なります。[ 12 ]
pandasを使ったコード:
import pandas as pd# データの読み込みdf_temp = pd.read_csv ( " temp_record.csv " , index_col = "date" , parse_dates = True , dtype = { "temp" : int } )# データの探索print ( df_temp.dtypes ) print ( df_temp.head ( ) )# 移動平均を計算するdf_temp.rolling ( 2 ) .mean ( )極座標を用いたコード:
import polars as pl# データの読み込みdf_temp = pl . read_csv ( "temp_record.csv" , try_parse_dates = True , dtypes = { "temp" : int } ) . set_sorted ( "date" )# データの探索print ( df_temp.dtypes ) print ( df_temp.head ( ) )# 移動平均を計算するdf_temp.rolling ( " date " , period = "2d" ) . agg ( pl.mean ( " temp " ))Dask は、NumPy、pandas、scikit-learnを使用して並列計算を適用するための Python パッケージであり、メモリに収まらないほど大きなデータセットに使用されます。Polars は単一マシンでの使用向けですが、Dask は分散コンピューティング向けです。[ 8 ]
DuckDBは、構造化データに対する効率的な分析クエリを実行するためのインプロセスSQL OLAPデータベースシステムです。DuckDBとPolarsはどちらも優れた分析パフォーマンスを提供しますが、DuckDBはクエリの実行においてSQL中心であるのに対し、PolarsはPython中心です。[ 8 ]
Apache Sparkには、分散ビッグデータ処理用のPython APIであるPySparkがあります。Daskと同様に、Sparkは分散コンピューティングに重点を置いていますが、Polarsは単一マシンでの使用を目的としています。そのため、単一マシンでデータを処理する場合にはPolarsが有利ですが、単一マシンに収まらない大規模なデータセットにはSparkの方が適している場合があります。[ 8 ]