PolarsでCSVファイルを読み込む方法を解説
Published on
PythonのデータフレームライブラリであるPolarsは、構造化データの処理において、直感的でパワフルなインターフェースを提供します。特にCSVファイルを扱う場合、Polarsは、pandasのような分かりやすいメソッドを提供するため、使いやすいです。例えば、 read_csv()
や scan_csv()
などのメソッドがあります。この記事では、これらのメソッドを使い、どのように利用するかを解説します。
read_csv()でCSVファイルをインポートする
CSVファイルをインポートするために、Polarsは read_csv()
という使いやすいメソッドを提供しています。その構文はpandasと驚くほど似ているため、それに慣れ親しんでいる人にとっては移行が容易です。以下は簡単なデモンストレーションです。
import polars as pl
# read_csvでCSVファイルを読み込む
df = pl.read_csv('data_sample.csv')
print(df)
出力:
shape: (3, 4)
┌───────────┬───────┬─────┬───────────────────┐
│ studentId ┆ Name ┆ Age ┆ FirstEnrollment │
│ --- ┆ --- ┆ --- ┆ --- │
│ i64 ┆ str ┆ i64 ┆ str │
╞═══════════╪═══════╪═════╪═══════════════════╡
│ 1 ┆ Mike ┆ 24 ┆ 2020-01-17 │
│ 2 ┆ Sarah ┆ 33 ┆ 2021-07-23 │
│ 3 ┆ John ┆ 19 ┆ 2022-12-20 │
└───────────┴───────┴─────┴───────────────────┘
read_csv()で日付をパースする
CSVファイルをインポートする際に、特定の列を日時オブジェクトとしてパースしたい場合があります。この機能は、 parse_dates=True
パラメータによって有効になります。例えば:
# 日付解析機能を使用したCSVの読み込み
df_dates = pl.read_csv('data_sample.csv', parse_dates=True)
print(df_dates)
データ型をダイナミックに変更する
ファイルを読み込む際に、特定の列のデータ型を変換することもできます。例えば、 i64
から Int32
に 'Age' 列のデータ型を変換する方法は以下の通りです。
# 特定のデータ型でCSVを読み込む
df_age_casted = pl.read_csv('data_sample.csv', parse_dates=True).with_column(pl.col('Age').cast(pl.Int32))
print(df_age_casted)の日本語訳:
Polarsの優れている点の1つは、DataFrameを表示する際に列の型を表示できるため、データ型のトラブルシューティングが容易になることです。
## scan_csv()を使用した読み取りの最適化
大規模なデータセットに対して、Polarsはよりリソースを効率的に使用する方法を提供します- 'scan_csv()'。遅延評価を活用することにより、このメソッドはデータをメモリに読み込むのは必要な時だけ(つまり、collect()が呼ばれたとき)であり、メモリのオーバーヘッドを可能な限り低減できます。 これは、次のように簡単に見えます。
```python
# Efficient read with scan_csv
q = pl.scan_csv('data_sample.csv')
df_lazy = q.collect()
print(df_lazy)
操作を実行するために collect()
を呼び出すことを忘れないでください。そうしないと、操作(plan)の表現が返されます。
これらは、PolarsがCSVファイルとの対話に使用できる方法の一部にすぎません。明確な構文と強力な関数により、Pythonでのデータ操作に優れたツールになります。
Polars ExpressionsおよびActionsの理解
Polarsは、イーガー操作とレイジー操作の両方をサポートしています。 イーガーモードでは、演算は直ちに実行されます。一方、レイジーモードでは、操作がキューに入れられ、必要に応じてのみ評価されます。これにより、効率性とメモリ使用量を最適化します。
scan_csv()を使用したレイジー評価の使用
scan_csv()
を使用すると、データが直ちにメモリにロードされるわけではありません。代わりに、Polarsは実行する操作を含むクエリプランを構築します。 このクエリプランは、 collect()
が呼ばれたときにのみ実行されます。 この技術は、大規模なデータセットの場合に、より効率的なメモリ使用と高速な計算が可能になるため、遅延評価として知られています。 以下は例です。
# Lazy read with scan_csv
query = pl.scan_csv('data_sample.csv')
print(query)
上記のコードを実行すると、「計画」の概要が表示されますが、操作自体はまだ実行されていません。
naive plan: (run LazyFrame.describe_optimized_plan() to see the optimized plan)
CSV SCAN data_sample.csv
PROJECT */4 COLUMNS
この計画を実行してデータをメモリに読み込むには、 collect()
メソッドを使用する必要があります。
df_lazy = query.collect()
print(df_lazy)
CSV以外の読み取り:データ操作
CSVの読み取りだけでなく、Polarsは、pandas操作に適合する包括的なデータ操作関数を提供しています。 これにより、Polarsは、データのフィルタリング、変換の適用、情報の集計など、すべてを高いパフォーマンスで処理できる効率的な多目的ツールになります。
Polars DataframeをPyGWalkerで可視化する
[![PyGWalker for Data visualization](https://user-images.githubusercontent.com/8137814/221879671-70379d15-81ac-44b9-b267-a8fa3842a0d9.png)]( (opens in a new tab)https://github.com/Kanaries/pygwalker) (opens in a new tab)
Pythonのコーディングを使って複雑な処理を完了する必要はもうなく、単にデータをインポートして、変数をドラッグアンドドロップするだけで、あらゆる種類のデータ可視化を作成できます!操作に関するクイックデモ動画はこちらです。
Jupyter NotebookでPyGWalkerを使用する方法は次のとおりです。
pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)
代わりに、Kaggle Notebook / Google Colabで試すこともできます。
PyGWalkerは、オープンソースコミュニティのサポートによって構築されています。 PyGWalker GitHubをチェックし、スターをつけてください!
よくある質問:
Polarsを操作する中で、いくつかの質問に遭遇するかもしれません。 ここにいくつかの一般的な質問を示します。
- Polarsのread_csv()関数とscan_csv()関数の主な違いは何ですか?
read_csv()
は、CSVファイルを読み込み、すべてのデータをメモリにロードするシンプルな関数です。 一方、scan_csv()
は遅延的に動作するため、collect()
が呼び出されるまでデータを読み込みません。 これにより、scan_csv()
は大規模なデータセットで効率的であり、必要なデータのみをメモリに読み込むためです。
- Polarsは、CSVファイルを読み込みながら日付の解析を処理できますか?
はい、Polarsは日付の解析を処理できます。 read_csv()
関数を使用する際に、単にparse_dates = True
引数を設定するだけで、Polarsは自動的に日付情報を持つ列を解析しようとします。
- CSVファイルを読み込みながら、特定の列のデータ型を変更することはできますか?
もちろん。 Polarsは、CSVファイルの読み込みプロセス中に列データ型を変更することを許可します。 with_columns()
メソッドとcast()
関数を組み合わせて使用することができます。 たとえば、「df = pl.read_csv('data.csv').with_columns(pl.col('Age').cast(pl.Int32))
」は、「Age」列をInt32
に変更します。