検証環境
本記事のコマンドはすべて docker run --rm ubuntu:24.04(2026-06-22 実測)で確認しています。VPS や WSL2 でも同じ手順で動作します。
Pandas でデータを扱っていると、いつかぶつかる壁があります。「数百万行のCSVを読み込んだらメモリが足りない」「groupby の処理が遅くて待ちきれない」という状況です。Dask はそのPandasの限界を、コードをほぼ変えずに突破できるライブラリです。
ただし「Dask を使えば何でも速くなる」は誤解です。実際に Ubuntu 24.04 の Docker コンテナで測ってみたところ、単純な groupby 集計はPandasの方が速く、Dask が速いのはパーティション単位の並列変換に限られました。この記事では実測数値を正直に載せながら、Dask が本当に効く場面を紹介します。
この記事のポイント
- Ubuntu 24.04 に Dask をインストールする手順(PEP 668 対応済み)
- 実測:
map_partitionsでは Dask が 1.66倍速い。単純 groupby は Pandas が速い - Dask の本当の強みは「メモリに乗り切らない大規模データの out-of-core 処理」
- Pandas コードを最小限の修正で Dask に移行する書き方
Dask とは何か
Dask は Python の並列計算ライブラリで、Pandas の DataFrame API をほぼそのまま使いながら、データを複数の「パーティション」に分割して処理できます。
最大の特徴は遅延評価(lazy evaluation)です。Dask のコードを書いただけでは何も実行されません。.compute() を呼んだ瞬間に初めてすべての処理がまとめて走ります。この仕組みにより、処理全体を最適化してから実行できます。

Pandas との違いを一言で言うと「全データを一度にメモリに展開しない」点です。100GB のCSVでも、パーティション単位で読んで処理するため、手元の 8GB RAM のマシンでも扱えます。
Ubuntu 24.04 へのインストール手順
手順1:Python 仮想環境を準備する
Ubuntu 24.04 では PEP 668 という仕様により、システムの Python に直接 pip install できなくなっています。最初に仮想環境(venv)を作るのが必須です。
Setting up python3.12 (3.12.3-1ubuntu0.13) …
Setting up python3-venv (3.12.3-0ubuntu2.1) …
$ python3 -m venv ~/dask_env
$ source ~/dask_env/bin/activate
(dask_env) $
Ubuntu 22.04 の場合は apt install python3-pip を追加すれば、仮想環境なしでも pip3 install できます。ただし、将来を見越してvenvを使う習慣をつけておくと安全です。
手順2:Dask をインストールする
Collecting dask[dataframe]
Installing collected packages: click-8.4.1 cloudpickle-3.1.2
dask-2026.6.0 fsspec-2026.6.0 numpy-2.5.0
pandas-3.0.3 partd-1.4.2 pyarrow-24.0.0 toolz-1.1.0
Successfully installed dask-2026.6.0 pandas-3.0.3 numpy-2.5.0
(dask_env) $ python3 -c “import dask; print(dask.__version__)”
2026.6.0
dask[dataframe] と書くと Pandas・NumPy・PyArrow も一緒にインストールされます。依存関係を個別に管理する手間が省けて楽です。

手順3:バージョンを確認する
dask: 2026.6.0
pandas: 3.0.3
numpy: 2.5.0

Pandas コードを Dask に移行する
Dask の移行がしやすい理由は、API がほぼ Pandas と同じだからです。主な違いは2点だけです。
import pandas as pd→import dask.dataframe as dd- 結果を使う最後に
.compute()を呼ぶ
import pandas as pd
df = pd.read_csv(‘large_file.csv’)
result = df.groupby(‘category’)[‘amount’].sum()
# — Dask(変更点は3行だけ)—
import dask.dataframe as dd
ddf = dd.read_csv(‘large_file.csv’) # メモリに展開しない
result = ddf.groupby(‘category’)[‘amount’].sum().compute() # ← .compute() 追加
既存の Pandas コードを Dask に移すとき、ほとんどの場合は pd. を dd. に変えて末尾に .compute() を追加するだけです。

実測:Dask は Pandas より本当に速いのか
Ubuntu 24.04 の Docker コンテナ(--cpus=4)で Dask 2026.6.0 と Pandas 3.0.3 を比較しました。結果は予想と違いました。
groupby 集計:Pandas の圧勝
5百万行の DataFrame に対して複数キーの groupby+agg を実行した結果:
| 処理 | 行数 | pandas | Dask(4 partitions) | 差 |
|---|---|---|---|---|
| groupby + agg(sum/mean/count) | 500万行 | 0.152s | 1.660s | Pandas が 10.9倍速い |
| groupby + sum(単純) | 1000万行 | 0.120s | 0.404s | Pandas が 3.4倍速い |
正直、これは最初に測って驚きました。Dask のスケジューラがタスクグラフを構築・配布するオーバーヘッドが、実際の計算時間を大幅に上回ってしまいます。データが全部メモリに収まる場合、groupby の集計は Pandas の方が速いです。
map_partitions:Dask の逆転
パーティション単位の CPU バウンドな変換処理では、Dask が本領を発揮しました。
| 処理 | 行数 | pandas apply | dask map_partitions(8分割) | 差 |
|---|---|---|---|---|
| Z スコア正規化 + log変換 | 200万行 | 0.141s | 0.085s | Dask が 1.66倍速い |
map_partitions は各パーティション(この場合は8分割)に同じ関数を並列で適用します。パーティション間に依存関係がない変換処理では、CPUコアを有効に使えます。



Dask が本当に効く3つの場面
①メモリに乗り切らない大規模CSV
Dask の最大の強みは out-of-core 処理です。100GB のCSVを Pandas で読もうとするとメモリ不足でクラッシュしますが、Dask なら dd.read_csv('*.csv') とするだけで複数ファイルをパーティション単位で読み込めます。
ddf = dd.read_csv(‘/data/logs/*.csv’, dtype={‘user_id’: ‘int32’})
result = ddf.groupby(‘user_id’)[‘revenue’].sum().compute()
# ↑ パーティション単位で読みながら集計。100GBでも OK
②パイプラインの構築と遅延実行
前処理 → 特徴量生成 → 集計 という一連の処理を Dask で書くと、.compute() を呼ぶまで何も実行されません。途中で「この処理はいらなかった」と気づいて削除しても、実行コストがかかっていないため無駄がありません。
# ここまで何も実行されない
ddf = ddf[ddf[‘amount’] > 0]
ddf[‘tax’] = ddf[‘amount’] * 0.1
result = ddf.groupby(‘region’)[‘tax’].sum()
# .compute() で全処理をまとめて最適化して実行
output = result.compute()
③map_partitions での並列変換
カスタム関数をパーティションごとに並列で適用する場合、複数CPUコアを使えます。実測では 8パーティション・4CPU のとき 1.66倍速でした。
注意
Dask のデフォルトスケジューラはスレッド(synchronous または threads)を使います。Python の GIL により、純粋な CPU 計算は並列化されにくいです。本当にCPU並列が必要なら dask.distributed でローカルクラスターを立てるか、NumPy / Numba と組み合わせる必要があります。
よくあるエラーと解決策
① PEP 668 エラー(Ubuntu 24.04)
× This environment is externally managed
hint: See PEP 668 for the detailed specification.
Ubuntu 24.04 のシステム Python は PEP 668 でガードされています。python3 -m venv ~/dask_env && source ~/dask_env/bin/activate で仮想環境を作ってから pip install してください。
② .compute() を忘れてオブジェクトが返る
type(result) → <class ‘dask.dataframe.core.Series’>
# ← pandas の Series じゃない。.compute() が必要
result = ddf.groupby(‘cat’)[‘amount’].sum().compute()
type(result) → <class ‘pandas.core.series.Series’>
Dask の処理はすべて「予約」状態なので、結果を使いたいときは必ず .compute() を追加します。
③ メモリ使用量が Pandas より増える
実測では 5百万行の groupby で Dask のピークメモリが Pandas(229 MB)より Dask(383 MB)の方が大きくなりました。タスクグラフの管理と中間結果の保持にオーバーヘッドがあります。データがメモリに収まるサイズなら、Dask のメリットは薄いです。
Ubuntu 22.04 vs 24.04 の違い
同じ Dask 2026.6.0 でも、Ubuntu のバージョンによって Python と依存パッケージのバージョンが変わります。
| 項目 | Ubuntu 22.04 (Jammy) | Ubuntu 24.04 (Noble) |
|---|---|---|
| Python | 3.10.12 | 3.12.3 |
| pandas(pip 最新) | 2.3.3 | 3.0.3 |
| numpy(pip 最新) | 2.2.6 | 2.5.0 |
| pip install の方法 | pip3 で直接 OK | venv が必須(PEP 668) |
Ubuntu 24.04 を使う場合は、最初から venv を作る癖をつけておくと後でつまずかなくて済みます。
まとめ
Dask on Ubuntu の実測をまとめると:
- インストールは
python3 -m venv+pip install 'dask[dataframe]'の2ステップ(Ubuntu 24.04) - 単純な groupby 集計では Pandas の方が速い(スケジューラオーバーヘッドが支配的)
map_partitionsによる並列変換は Dask が 1.66倍速い(実測、4CPU・8パーティション)- Dask の本領は「メモリに乗り切らない大規模データの out-of-core 処理」と「遅延評価パイプライン」
手元のデータが数百MB 程度なら Pandas で十分です。GB 単位になってきたとき、または複数の大きなCSVをまとめて処理したいときに Dask を試してみてください。移行コストは想像より小さいはずです。
本格的にサーバーでデータ処理を動かすなら、VPS の選び方も重要です。メモリが多いほど Pandas でもできることが広がり、CPU コア数が多いほど Dask の並列処理が効きます。


コメント