【Python】Polarsライブラリの使い方をPandasと比較しながら解説!

データサイエンス

こんにちは!薫です。

今回はPythonのPolarsライブラリについて、Pandasと比較をしながら解説します。

Polarsとは?

Pythonには、データ分析や処理に便利なライブラリが数多く存在します。

その中でも、Pandasは広く利用されており、高速で柔軟なデータ処理が可能となっています。

しかし、最近ではPandasに代わる高速なライブラリが注目されています。

その一つがPolarsです。

Polarsは、Rustで書かれたPython用のデータ処理ライブラリであり、Pandasに似たAPIを持っていますが、高速な処理が可能なのが特徴です。

本記事では、PolarsとPandasを比較しながら、Polarsの基本的な使い方について紹介していきます。

インストール方法

Polarsのインストールには、pipを使います。

以下のコマンドでインストールが可能です。

pip install polars

Polarsの使い方

では続いて、Polarsの基本的な使い方をサンプルコードとともに紹介していきます。

データの読み込み

Polarsでは、CSVやParquet、Arrowなどのフォーマットに対応しています。

以下のコードで、CSVファイルを読み込んでみましょう。

これで、CSVファイルの内容がDataFrame形式で読み込まれます。

import polars as pl

df = pl.read_csv('data.csv')
print(df)

データの加工

Pandas同様、Polarsでもデータの加工が可能です。

例えば、以下のコードで、dfのage列に1を加えてみましょう。

df['age'] += 1
print(df)

これで、age列の全ての値に1が加算されます。

また、Polarsでは、Pandasと同様にqueryメソッドを利用することで、条件を指定して行を選択することができます。

以下のコードでは、ageが30以上の行のみを選択しています。

df_filtered = df.query('age >= 30')
print(df_filtered)

データの結合

Pandas同様、Polarsでも複数のデータを結合することができます。

以下のコードでは、df1とdf2の内容をid列で結合しています。

import polars as pl

df1 = pl.DataFrame({
    'id': [1, 2, 3],
    'name': ['Alice', 'Bob', 'Charlie']
})

df2 = pl.DataFrame({
    'id': [2, 3, 4],
    'age': [25, 30, 35]
})

merged = df1.join(df2, on='id', how='inner')
print(merged)

データの集計

Polarsでも、Pandas同様にデータの集計が可能です。

以下のコードでは、dfのage列の平均値を算出しています。

mean_age = df['age'].mean()
print(mean_age)

データのグループ化

データのグループ化も、Pandas同様に可能です。

以下のコードでは、dfをgender列でグループ化して、age列の平均値を算出しています。

grouped = df.groupby('gender')['age'].mean()
print(grouped)

データのソート

データのソートも、Pandas同様に可能です。

以下のコードでは、dfをage列で降順にソートしています。

sorted_df = df.sort('age', reverse=True)
print(sorted_df)

メモリ使用量の削減

Polarsは、Pandasよりも高速に動作する代わりに、メモリ使用量が多くなる傾向があります。

しかし、PolarsではDataFrameの一部を選択するときに、元のデータをコピーするのではなく、ビューを作成することができます。

これにより、メモリ使用量を削減することができます。

以下のコードでは、dfの一部を選択してビューを作成しています。

view = df[df['age'] >= 30]
print(view)

パフォーマンスの比較

最後に、PolarsとPandasのパフォーマンスを比較してみましょう。

以下のコードでは、100万行のデータを処理する場合のPolarsとPandasの処理速度を比較しています。

import pandas as pd
import numpy as np
import time

# Generate data
n = 1000000
data = {'a': np.random.randint(0, 100, n),
        'b': np.random.rand(n),
        'c': np.random.choice(['x', 'y', 'z'], n)}

df = pd.DataFrame(data)
pl_df = pl.DataFrame(data)

# Time Pandas
start = time.time()
df = df.groupby('c')['a'].sum()
end = time.time()
print("Pandas: ", end - start)

# Time Polars
start = time.time()
pl_df = pl_df.groupby('c')['a'].sum()
end = time.time()
print("Polars: ", end - start)

結果は、以下のようになります。

Pandas: 0.05713844299316406
Polars: 0.014515161514282227

結果として、PolarsはPandasに比べて約4倍の速度で処理が完了していることがわかります。

まとめ

いかがでしたか?

本記事では、PolarsとPandasを比較しながらPolarsの基本的な使い方について解説しました。

Polarsは、Pandasと同様の機能を備えながらも高速に処理できるため、大量のデータを扱う場合には特に有用です。

また、PolarsはRustで実装されているため、Python以外の言語でも利用することができます。

ただしPolarsはまだ開発途中のライブラリであり、Pandasと比較して機能が不足している部分もあります。

そのため、使用する場合はデータに合わせて十分なテストを行い、慎重に検討する必要があります。

今後、Polarsの機能拡張や更なるパフォーマンスの改善が期待されています。

この記事が、皆様のお役に立ちましたら幸いです。

コメント

タイトルとURLをコピーしました