Polarsとは
Polarsは、pandasと同じように表形式のデータを扱うライブラリです。しかし、内部の仕組みや書き方には大きな違いがあります。
このセクションでは、Polarsの特徴や、多くの開発者に選ばれている理由、pandasとの違いなどについて解説します。
【関連】Pythonをもっと詳しく学ぶならpaizaラーニング
Polarsの概要
Polarsは、表形式のデータをPythonで高速に処理するためのライブラリです。
pandasと同じように、DataFrameという構造を使ってデータを管理します。
CSVファイルを読み込んで列を選んだり、条件に合う行だけを取り出したりといった操作は、pandasでもPolarsでも可能です。
では、何が違うのでしょうか?
最大の違いは、処理の効率性です。
Polarsは大量のデータを扱う場面で、pandasよりも高速に動作するよう設計されています。
データの量が増えるほど、その差は顕著に現れます。
これからデータ処理を学ぼうとしている方にとって、Polarsは選択肢の1つとして検討する価値があります。
もしpandasを知っていれば、概念の理解はしやすいでしょう。
Polarsが選ばれる理由
Polarsが注目される理由は、主に3つあります。
それは次の3つです。
- 処理速度が速い
- メモリ効率が良い
- 書き方がわかりやすい
1つずつ、くわしく見ていきましょう。
1. 処理速度が速い
Polarsは内部でRustという言語を使って開発されています。
Rustは実行速度に優れた言語で、大量のデータを扱う際でも素早く処理できます。速いだけでなく、データ量が増えても安定して動く設計になっている点が実用上のポイントです。
2. メモリ効率が良い
同じ処理をpandasで行うよりも、使用するメモリ量を抑えて動作できる場合が多いです。
データが増えてきても、パソコンへの負荷が比較的かかりにくいという特徴があります。メモリ不足でエラーが出る心配が減るのは、実務では大きなメリットです。
3. 書き方がわかりやすい
Polarsの命令は、メソッドをつなげて書く形式(メソッドチェーン)になっています。
「何をしているか」が読み取りやすい構造になっており、処理の流れを追いやすいのが特徴です。初心者にとっても、コードの意図を理解しやすい設計だといえます。
pandasとの関係
Polarsは、よく「pandasの代わり」として紹介されますが、単なる代用品ではありません。
どちらもDataFrameを使ってデータを扱いますが、書き方や考え方が異なるためです。どちらを使うべきかは目的や状況によって変わります。
ここで、共通点や相違点について確認しておきましょう。
似ている点
- CSVを読み込む、列を選ぶ、フィルターをかけるといった基本操作の概念は共通している
- 表形式のデータを扱うライブラリである
異なる点
- コードの書き方が違う
- 処理の内部的な仕組みが異なる(Polarsは並列処理を活用し、大量データでも高速)
- pandasは情報が豊富で、学習リソースやライブラリとの連携が充実している
- Polarsには、Lazy APIという特徴的な処理方式がある
これから学び始める方は、まずはどちらか一方に集中して理解することをおすすめします。
【関連】Pythonのpandasとは?導入手順や基本操作を分かりやすく解説
Python環境でのインストールと始め方
Polarsをつかうには、まずPython環境への導入が必要です。
環境構築は手間がかかり、難しそうなイメージもあるかもしれませんが、Polarsのインストール手順は驚くほどシンプルです。
このセクションでは、インストールの手順からエラーの対処法まで解説します。
【関連】Pythonの環境構築を徹底解説!開発初心者向けに手順を紹介
インストール手順
PolarsはPythonのパッケージ管理ツール「pip」を使ってインストールできます。
ターミナル(Macの場合)またはコマンドプロンプト(Windowsの場合)を開いて、次のコマンドを入力して、実行してください。
インストールが完了したら、正しく導入されたか確認しましょう。
Pythonを起動して、次のように入力してみてください。
エラーが出なければ、インストール成功です!
ちなみに、仮想環境の利用もおすすめです。
仮想環境とは、プロジェクトごとにパッケージを管理できる独立したPython環境のことです。
異なるプロジェクトで異なるバージョンのライブラリを使っても干渉しないため、複数の学習プロジェクトを進める際に混乱を防げるというメリットがあります。
基本の書き出し
「Polarsを使い始める際は、まずプログラムの冒頭でimport polars as plと書きます。
このimport文は、「Polarsライブラリを読み込んで、plという短い名前で使えるようにする」という意味です。
この1行を書くことで、以降のコードでpl.read_csv()やpl.DataFrame()のように、Polarsの機能を呼び出せるようになります。
as plの部分は省略してimport polarsだけでも動きますが、毎回polars.read_csv()のように書かなければいけません。
plという短縮形は業界標準の慣習なので、この書き方に慣れておきましょう。
実際に、データを手で入力してDataFrameを作ってみましょう。
動物の名前と体重をまとめた小さな表を作ります。
出力結果
shape: (3, 2)
┌────────┬───────────┐
│ name ┆ weight_kg │
│ --- ┆ --- │
│ str ┆ i64 │
╞════════╪═══════════╡
│ イヌ ┆ 10 │
│ ネコ ┆ 4 │
│ ウサギ ┆ 2 │
└────────┴───────────┘このように、辞書形式でデータを渡すだけで表を作れます。
最初に覚えたい操作
DataFrameを作ったら、中身を確認する操作を覚えましょう。
データが正しく読み込まれているか、どんな構造になっているかを最初に確認する習慣をつけると、後のミスを減らせます。
よく使う操作を、ここで把握しておきましょう。
よく使う確認操作
- df.head():先頭の数行だけを表示する
- df.shape:DataFrameの行数と列数を確認する
- df.columns:列名を一覧で表示する
大量のデータを読み込んだときに、全体を表示せず冒頭だけ確認したい場面ではhead()が便利です。
shapeでデータの規模を把握し、columnsでどんな項目があるかを確認できます。
この3つを押さえておけば、基本的なデータ確認はできるはずです。
エラー時の見直しポイント
Polarsのインストール確認時に、よく見るエラーが次のメッセージです。
これは、Polarsがインストールされていない、もしくは別のPython環境にインストールされている場合に発生します。
インストールしたはずなのに、このエラーが出る場合は「インストールした場所」と「実行している場所」がズレている可能性もあります。
もし、エラーが出た場合は次のポイントを確認してみてください。
1. インストールを再確認
下記のコマンドを実行して、表示されるリストの中にpolarsがあるか確認してください。
polarsがなければ、インストールが失敗しています。
インストールのコマンドを確認して、再度実行してみましょう。
2. Pythonのバージョンとpipの対応を確認
複数のPythonがインストールされている場合、使っているPythonとpipが紐づいていない可能性があります。
次の2つのコマンドで確認しましょう。
出力例
Python 3.12.1出力例
pip 23.2.1 from /Users/local/.pyenv/versions/3.12.1/lib/python3.12/site-packages/pip (python 3.12)「pythonが3.9なのに、pipが3.11に紐づいている」という具合にバージョンが一致していない場合は、次の方法で解決します。
このpython -m pipという書き方を使えば、実行しているPythonと同じ環境に確実にインストールできます。
3. 仮想環境を使っている場合
仮想環境(venvなど)を作成している場合、その環境を有効化してからインストールしてください。
その環境を有効化していないと、インストールする場所にズレが生じる可能性があります。
4. Jupyter Notebookを使っている場合
Jupyter Notebookのセル内で下記を入力して実行してください。
先頭の!を忘れずに付けましょう。
エラーが出たら、焦らずに1つずつ確認していきましょう。
CSVデータ処理の基本と使い方
Polarsの用途として最も多いのが、CSVファイルの読み込みと処理です。
しかし、プログラミングを学んでいても、実際のファイルを扱う段階で戸惑う人は多いです。
実務で扱うデータの多くはCSV形式で配布されるため、これをスムーズに扱えるようになるのは必須だといえます。
このセクションでは、CSVデータの操作についてくわしく説明します。
CSV読み込みの基本
CSVファイルをPolarsで読み込むには、pl.read_csv()を使います。
括弧の中にファイルのパス(場所と名前)を文字列で渡すだけで、DataFrameとして読み込まれます。
出力例
shape: (5, 3)
┌────────────┬────────┬───────────┐
│ species ┆ name ┆ weight_kg │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞════════════╪════════╪═══════════╡
│ イヌ ┆ ポチ ┆ 10 │
│ ネコ ┆ タマ ┆ 4 │
│ ウサギ ┆ ピョン ┆ 2 │
│ ハムスター ┆ チビ ┆ 0 │
│ トリ ┆ ピー ┆ 1 │
└────────────┴────────┴───────────┘ちなみに、CSVの読み込みでエラーが出る原因として、よくあるのは次の2つです。
- 区切り文字の問題
CSVの多くはカンマ区切りですが、タブ区切りの場合はseparator="\t"のように指定する必要があります。
- 文字コードの問題
日本語を含むファイルでは文字コードが原因でエラーになるケースがあります。
その場合は、encoding="utf-8"やencoding="shift_jis"などを指定して対処しましょう。
データ確認の基本操作
CSVを読み込んだ後、最初にすべきなのはデータの基本的な状態を確認することです。
「正しく読み込めているか」や「想定通りのデータ型になっているか」を確認しないまま処理を進めると、後で予期しないエラーに悩まされるかもしれません。
よく使う操作を確認しておきましょう。
よく使う確認方法
- df.shape:行数と列数を確認する
データの規模を把握したいときに便利です。 - df.columns:列名を一覧表示する
どんな項目があるか、ひと目で把握できます。 - df.dtypesまたはdf.schema:各列のデータ型を確認する
数値か文字列かどうかを確認したい場合に有用です - df.null_count():列ごとの欠損件数を確認する
欠損値の有無を確認したいときに使用します。
まとめて確認したい場合は、df.describe()も便利です。
数値列については件数、平均、最小・最大値といった統計情報がまとめて表示されるため、大まかな傾向をつかめます。
filterによる条件抽出
条件に合う行だけを取り出すにはfilter()を使います。
例えば、体重が5kg以上の動物だけを取り出したい場合は、次のように書きます。
出力結果
shape: (1, 3)
┌─────────┬──────┬───────────┐
│ species ┆ name ┆ weight_kg │
│ --- ┆ --- ┆ --- │
│ str ┆ str ┆ i64 │
╞═════════╪══════╪═══════════╡
│ イヌ ┆ ポチ ┆ 10 │
└─────────┴──────┴───────────┘pl.col()は「この列を対象にする」という指定で、Polarsの中心的な書き方の1つです。
複数の条件を同時に指定する場合は、&(かつ)や|(または)で条件をつなぎます。
文字列の一致を調べたい場合は、pl.col("species") == "ネコ"のように書きます。
プログラミングに慣れている方であれば、特に覚えることは多くないでしょう。
よく使う整形処理
CSVを読み込んだ後に、よく行う整形処理をいくつか紹介します。
-
列名を変更する
rename()を使い、{"旧名前": "新名前"}という辞書形式で指定します。元のCSVファイルの列名が英語やわかりにくい名前の場合に有用です。
-
新しい列を追加する
with_columns()を使い、既存の列をもとに計算した値などを新列として追加できます。元のデータは変更されません。
-
データを並べ替える
sort()を使い、引数に列名を渡します。降順にしたい場合はdescending=Trueを指定します。
-
欠損値を扱う
データに空欄(欠損値)がある場合の処理方法です。drop_nulls()は欠損のある行を除き、fill_null()は別の値に置き換えられます。
これらの基本操作を覚えておけば、日常的なデータ整形作業の大部分をカバーできます。
Lazy APIとpandasとの違い
Polarsを調べていると「Lazy API」という言葉が出てきます。聞き慣れない用語で戸惑うかもしれませんが、仕組みは意外とシンプルです。
これはPolars特有のデータ処理方式で、「処理を後回しにして、まとめて最適化してから実行する」という考え方に基づいています。
Polarsは大量のデータを扱う場面で効率的であると先述しましたが、その理由はこの方式を採用しているからです。
一方、pandasは常に「即座に実行する」方式(eagerモード)で動作するため、この点が大きな違いになります。
このセクションでは、Lazy APIがどのような仕組みで、どんなメリットがあるのか学んでいきましょう。
Lazy APIの基本理解
Lazy APIは、処理をすぐに実行せずに「後でまとめて実行する」方式です。
通常のプログラムでは、コードを書いた順番に処理が実行されます。
しかしLazy APIでは、指示をすべて書き終えた後にcollect()というメソッドを呼び出したタイミングで初めて実行されます。
なぜこんな仕組みがあるのでしょうか?
それは、Polarsが積み上がった処理全体を見渡して、最も効率の良い実行順序を自動的に判断できるからです。
具体例で考えてみましょう。
下記のような順番で、プログラムが記述されているとします。
- 100万行のCSVを読み込む
- 条件に合う1000行だけに絞り込む
- 集計処理を行う
この場合、eagerモード(即座実行)では、まず100万行すべてを読み込んでから絞り込みます。
しかしLazy APIを使うと、Polarsが処理全体を分析し、読み込みと絞り込みを同時に行ったり、不要な処理を省略したりして、自動的に最適化してくれるのです。
データ量が多くなるほど、この効率の差が顕著になる理由がわかりますね。
eagerとの違い
eagerは、「すぐに実行する」方式です。
DataFrameに対してメソッドを呼び出すたびに、その場で処理が実行されます。これまでの説明で紹介してきた操作は、すべてeager方式です。
初心者にとっては、eagerの方が直感的です。
コードを書いてすぐに結果が返ってくるため、動作の確認がしやすく、学習の初期段階に向いています。
一方、Lazy APIを使う場合は次のような流れになります。
- df.lazy()でLazyFrameに変換する、またはpl.scan_csv()で読み込む時点からLazyとして扱う
- 処理を組み立てる(この時点ではまだ実行されない)
- 最後にcollect()を呼び出して実行する
Lazy APIでは、処理の指示だけを積み重ねていき、collect()を呼んだタイミングで初めて、Polarsが全体を最適化してから実行します。
つまり、eagerが「その場で即実行」なのに対し、Lazy APIは「全部書いてから効率的に実行」する方式です。
この違いを押さえておきましょう。
pandasとの発想の違い
pandasでは、メソッドを呼び出すたびに、その場で計算が行われます。例えばフィルターをかけると、即座に結果のDataFrameが返ってきます。これはPolarsのeager方式と同じです。
しかし、Lazy APIを使うと発想が大きく変わります。
Lazy APIでは、処理を「命令の積み上げ」として捉えます。最後にまとめて実行するという考え方は、パイプライン処理やデータベースのクエリに近い感覚です。
この発想の違いは、コードの書き方にも現れます。
Polarsでは、処理をメソッドで連続してつなぐ「メソッドチェーン」という書き方が自然です。しかし、pandasの書き方(処理ごとに変数に代入する方式)をそのまま持ち込もうとすると、Polarsの利点を活かしきれません。
最初は慣れが必要ですが、メソッドチェーンの書き方に慣れると、複雑な処理でも見通しが良くなります。
CSV処理とLazy APIのつながり
比較的小さなCSVファイルであれば、pl.read_csv()でeagerとして読み込んでも問題ありません。
しかし、行数が数十万件・数百万件になるような大きなCSVを扱う場合は、pl.scan_csv()を使うLazy APIの方が効率的です。
scan_csv()が優れているのは、ファイルを一度にすべてメモリに読み込まない点です。後に続く処理(フィルターや列選択)を先に確認し、必要な部分だけを効率よく読み込むような形で動作します。
例えば、特定の列だけを取り出す処理を書いた場合、scan_csv()なら読み込みの段階から不要な列を除外します。これにより、メモリ使用量が大幅に削減され、処理も高速になります。
一方、read_csv()では全ての列を読み込んでから不要な列を削除するため、データサイズが大きなCSVでは無駄が多くなるのです。
大きなデータを扱う機会が増えてきたら、この違いを意識すると処理がスムーズになります。
Polarsの学び方と活用の広げ方
ここまでで、Polarsの基本的な使い方を学びました。
しかし、Polarsには多くの機能があり、すべてを一度に習得しようとすると大変です。大切なのは、必要な機能から段階的に学んでいくことです。
このセクションでは、効率的な学習の進め方と、実務でPolarsを活用する具体的な場面について解説します。
初心者向け学習順序
Polarsを学ぶ際は、次のような順序で進めると無理なく習得できます。
学習をどう進めればいいかわからない方は、ぜひ参考にしてみてください。
ステップ1:環境構築と動作確認
まずはインストールして、DataFrameを実際に作って表示する練習をしましょう。「動いた!」という成功体験が、学習の第一歩です。
ステップ2:CSV読み込みとデータ確認
実際のCSVファイルを読み込み、head()やshapeでデータの中身を確認する感覚をつかみます。この段階で、データの構造を把握する習慣をつけましょう。
ステップ3:基本操作の習得
filter()で条件を指定して行を絞り込む操作、group_by()でデータをまとめて集計する操作へと進みます。
ステップ4:Lazy APIの理解
基本操作に慣れてきたら、Lazy APIの考え方を学び、より大きなデータへの対応方法を理解しましょう。
最初からすべての機能を習得しようとする必要はありません。「動かしながら覚える」というサイクルを繰り返すのが、何よりも大事です。
実務で使いやすい場面
Polarsが実務で活躍しやすい場面をいくつか挙げてみます。具体的な活用イメージがあると、学習する意味も見出せるはずです。
CSVデータの前処理
システムから出力されたログや、スプレッドシートで管理されたデータをCSVとして受け取り、整形してから分析に渡す作業は多くの現場で発生します。
そのままでは分析に使えないため、列名を整えたり、不要な行を削除したり、データ型を修正したりといった前処理が必要です。
Polarsは、こうした作業を高速にこなせます。
機械学習や可視化の前段階としてのデータ整形
機械学習ライブラリ(scikit-learn)やグラフ作成ライブラリ(matplotlib)を使う前に、データを整える必要があります。
Polarsで整形したDataFrameは、これらのライブラリにそのまま渡せるため、スムーズに次の工程へ進めます。
複数ファイルの結合や集計
月ごとに分かれたCSVファイルを1つにまとめたり、複数の部署から集めたデータを統合したりする作業も、Polarsの得意分野です。
欠損値の補完や重複データの削除なども、効率よく処理できます。データ量が増えても処理速度が落ちにくいため、安心して使えます。
このように、Polarsは日常的なデータ処理の多くの場面で活躍します。
まずは自分の業務で扱っているデータに対して、小さな処理から試してみるのをおすすめします。
関連機能とのつながり
Polarsの基本に慣れてきたら、次に学ぶと理解が広がる機能がいくつかあります。
ここでは、その代表的な機能を3つ紹介します。
group_by():グループごとに集計する
データを特定の列の値ごとにまとめて、集計できる機能です。
例えば、「動物の種類ごとに平均体重を計算する」場合や「部署ごとに売上の合計を出す」といった処理に使います。
Excelのピボットテーブルに似た操作が、コードで書けるようになります。
join():複数のデータを結合する
別々のDataFrameを、共通の列をキーにして横につなげる機能です。
「顧客IDをキーに、購入履歴と会員情報を結合する」といった場面で活躍します。
データを1つの表にまとめたいときに欠かせない操作です。
pivot():データの形を変える
縦長のデータを横長に変換する機能です。「月別の売上データを、商品ごとの列に展開する」といった集計表の作成に便利です。
データの見せ方を変えて、分析しやすい形に整えられます。
これら3つの機能は、実務のデータ処理でよく使います。filter()やselect()といった基本操作に慣れたら、少しずつ取り入れてみてください。
よくある質問(Q&A)
Q. PolarsはPython以外でも使えますか?
PolarsはもともとRustという言語で書かれており、RustとPythonのどちらからも利用できます。ただし、現在最も広く使用されているのはPython向けのインターフェースです。
Q. Jupyter Notebookでも使えますか?
Jupyter Notebookでも問題なく動作します。ただし、Notebookで使用しているPythonカーネルの環境にPolarsがインストールされている必要があります。
使用できない場合は、ターミナルでインストールした環境と、Notebookで使っている環境が一致しているかどうかを確認してください。
Q. DataFrameをCSVとして保存するにはどうすればいいですか?
df.write_csv("出力ファイル名.csv")とすると、DataFrameをCSVファイルとして書き出せます。保存先はファイル名に含まれるパスで指定できます。
Q. PolarsでExcelファイルは読み込めますか?
read_excel()という関数を使えば、Excelファイルの読み込みも行えます。ただし、追加でxlsx2csvやopenpyxlといった別のライブラリが必要になる場合があります。
Q. Polarsのバージョンによって書き方が変わることはありますか?
あります。Polarsは開発が活発なライブラリであり、バージョンアップにともなって関数の書き方や引数が変更される場合があるので、覚えておきましょう。
エラーが出た場合は、公式ドキュメントで使用しているバージョンに対応した記述を確認するのをおすすめします。
まとめ
この記事では、Polarsの基本から応用的な機能まで解説してきました。
特にPolarsが活躍するのは、次のような場面です。
Polarsが活躍する場面
- 大量のCSVデータを高速に処理したいとき
- 機械学習や可視化の前処理としてデータを整形したいとき
- 複数ファイルの結合や集計を効率的に行いたいとき
- pandasよりもメモリ効率を重視したいとき
最後に、重要なポイントをおさらいしておきましょう。
重要なポイント
- Polarsは処理速度とメモリ効率に優れたライブラリ
- Polarsとpandasは似ているが、書き方や内部の仕組みが異なる
- CSV読み込み(read_csv())とフィルタリング(filter())が基本
- Lazy APIは後でまとめて実行する方式で、大量データで威力を発揮する
Polarsは、データ処理をよりスムーズにしてくれるツールです。
まずは、手元の小さなCSVファイルで試してみてください。
read_csv()で読み込み、head()で確認し、filter()で絞り込むという基本の流れを体験すれば、Polarsの利点がすぐに実感できます。
そこから、業務に必要な機能を学んでステップアップしていきましょう。