Skip to content

PolarsでCSVファイルを読み込む方法を解説

Updated 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 (opens in a new tab)は、Polarsデータフレームからデータ可視化を簡単に作成できるオープンソースのPythonライブラリです。

PyGWalker for Data visualization (opens in a new tab)

Pythonのコーディングを使って複雑な処理を完了する必要はもうなく、単にデータをインポートして、変数をドラッグアンドドロップするだけで、あらゆる種類のデータ可視化を作成できます!操作に関するクイックデモ動画はこちらです。


Jupyter NotebookでPyGWalkerを使用する方法は次のとおりです。

pip install pygwalker
import pygwalker as pyg
gwalker = pyg.walk(df)

代わりに、Kaggle Notebook / Google Colabで試すこともできます。

Kaggle NotebookでPyGWalkerを実行する (opens in a new tab)Google ColabでPyGWalkerを実行する (opens in a new tab)PyGWalkerにGitHubの⭐️を与える (opens in a new tab)
Kaggle NotebookでPyGWalkerを実行する (opens in a new tab)Google ColabでPyGWalkerを実行する (opens in a new tab)GitHubでPyGWalkerを実行する (opens in a new tab)

PyGWalkerは、オープンソースコミュニティのサポートによって構築されています。 PyGWalker GitHubをチェックし、スターをつけてください!

よくある質問:

Polarsを操作する中で、いくつかの質問に遭遇するかもしれません。 ここにいくつかの一般的な質問を示します。

  1. Polarsのread_csv()関数とscan_csv()関数の主な違いは何ですか?

read_csv()は、CSVファイルを読み込み、すべてのデータをメモリにロードするシンプルな関数です。 一方、scan_csv()は遅延的に動作するため、collect()が呼び出されるまでデータを読み込みません。 これにより、scan_csv()は大規模なデータセットで効率的であり、必要なデータのみをメモリに読み込むためです。

  1. Polarsは、CSVファイルを読み込みながら日付の解析を処理できますか?

はい、Polarsは日付の解析を処理できます。 read_csv()関数を使用する際に、単にparse_dates = True引数を設定するだけで、Polarsは自動的に日付情報を持つ列を解析しようとします。

  1. CSVファイルを読み込みながら、特定の列のデータ型を変更することはできますか?

もちろん。 Polarsは、CSVファイルの読み込みプロセス中に列データ型を変更することを許可します。 with_columns()メソッドとcast()関数を組み合わせて使用することができます。 たとえば、「df = pl.read_csv('data.csv').with_columns(pl.col('Age').cast(pl.Int32))」は、「Age」列をInt32に変更します。