r/Python🔥 46
💬 20

【メモリ節約術】PandasからPolarsへ移行する際の落とし穴:知らないとハマるQuantileの罠

paltman94
3か月前

ディスカッション (21件)

0
paltman94OP
👍463か月前

PandasからPolarsに乗り換えることでメモリを節約できますが、Quantileのデフォルト補間方法に微妙な違いがあるので注意が必要です。

詳細はこちらをご覧ください: https://wedgworth.dev/polars-vs-pandas-quantile-method/

PolarsとPandasの間には、これ以外にも、うっかり見過ごしてしまうような大きな違いはありますか?

1
KianAhmadi
👍113か月前

PolarsってRustで書かれたフレームワークだっけ?

3
not_my_userid
👍363か月前

Polars、マジで最高なんだよね。はい、TEDトーク終わり。これ作った人はマジで称賛されるべき。/ Rustに転向した開発者より

4
Heco1331
👍393か月前

まだPolarsはあんまり使ってないんだけど、見た感じ、大量のデータを扱う人(例えば俺みたいな)にとって一番のメリットは、パイプライン(この2つのカラムを足して、5を掛ける、とか)を記述して、そこにデータをストリームとして流せることだと思う。

つまり、Pandasみたいに、すべてのデータをデータフレームにロードしようとしてメモリを使いまくるのとは違って、Polarsはデータをバッチでロードして、最終結果だけを見せてくれるんだ。

5
sheevum
👍273か月前

それと、APIがマジで分かりやすい!

6
AlpacaDC
👍43か月前

しかも、めっちゃ速い。

7
Optimal-Procedure885
👍13か月前

まさにそう。数百万のデータポイントを一度に処理する必要があるデータラングリングをたくさんやってるんだけど、Polarsの仕事の速さに本当に驚かされるよ。

8
Doomtrain86
👍13か月前

Rのdata.tableからPandasに移行したとき、マジで困惑したよ。「マジでこれ使ってんの?!」って感じ。ホラー映画みたいだった。で、Polarsを見つけたんだ。今は納得してる。

9
DueAnalysis2
👍63か月前

それに加えて、クエリソルバーがあって、パイプラインを最適化してくれるから、レイジーAPIはさらに効率的なんだよね。

10
GriziGOAT
👍33か月前

それは、明示的にオプトインする必要がある2つの別々の機能によるね。

  1. LazyFrames - df.with_columns(…).group_by(…).(…).collect()みたいに変換のセットを構築するんだ。変換は.collect()を呼ぶまで実行されない。これで、ステップごとに変換を構築できるけど、完全な変換が作成されるまで実行を遅らせることができる。こうすることで、Polarsはより賢く変換を実行できるんだ。多くの場合、メモリやCPUを大幅に節約できるよ。
  2. ストリーミングモード - あまり使ったことがないんだけど、必要なデータだけをメモリにロードして、データフレームをチャンクで処理する、より効率的なクエリプランを実行するのに役立つ。知る限りでは、ストリーミングを行うにはLazyにする必要がある。最後に確認したときには、すべての操作がストリーミングモードでサポートされていたわけではないけど、最近数ヶ月でストリーミングエンジンが大幅に刷新されたから、もうそうではないかもしれないね。
11
andy4015
👍53か月前

Pandasはロシアの戦車、Polarsは巡航ミサイルって感じ。それ以外は、俺が使った限りでは、どっちも同じ結果になるみたいだけどね。

12
spookytomtom
👍153か月前

もうpandasは捨てたわ。ホッキョクグマが俺の新しい守護動物だ。

13
EarthGoddessDude
👍23か月前

マジそれな兄弟。アヒルさんも忘れちゃいけない。

14
UltraPoci
👍33か月前

同じことをするのが待ちきれないけど、まずはgeopolarsが必要なんだ:(

15
PandaJunk
👍13か月前

必要なときに簡単に変換できるよ。PolarsとPandasは相性が良いから、二者択一ってわけじゃないんだ。パイプラインで両方使えるよ。

16
Secure-Hornet7304
👍13か月前

Pandasの使用経験はあまりないけど、データフレームが非常に大きいときに、このメモリの問題に既に出くわしたことがあるよ。最初は、Pandasでプロジェクトを実装する方法が、非常に多くのRAMを消費し、遅くしているのだと思った(parquetとか何もなしでCSVを扱っていた)。でも、Pandasがデータフレーム全体をRAMにロードすると、データの操作が戦略ではなくリソースの問題になるなら、納得がいくね。

全部Polarsに置き換えて、時間とリソースを計測して、どうなるか試してみるよ。

17
BelottoBR
👍33か月前

PandasからPolarsに乗り換えて、パフォーマンスに感動してる。遅延評価を扱うのには慣れてるんだ(メモリに収まらないサイズのデータフレームを扱うためにDaskを使ってたからね)。

18
klatzicus
👍13か月前

(Lazy APIを使ってパフォーマンスを最適化するために式の順序を変更する)式の最適化で苦労したことがあるよ。例えば、列の削除が、その列を操作する式の前に移動されちゃったりね。でも、これは少し前のビルドでの話。

あと、圧縮ファイルはストリーミングされずにメモリに読み込まれるよ(scan_csvまたはread_csv操作で読み込まれる圧縮テキストファイル)。

19
MolonLabe76
👍13か月前

めちゃくちゃ乗り換えたいんだよね。でも、GeoPolarsが完成するまでは無理だな。これは、PolarsがArrow Extension Typesをサポートしてない/サポートする予定がないからブロックされてるんだ。さらに、Polarsはコアデータ型のサブクラス化をサポートしてないし。つまり、乗り換えたいのは山々だけど、主なユースケースが実現できないんだ。

20
Interesting-Frame190
👍23か月前

Pandasに対抗するために、もっとOOP的なPyThermiteを作り始めたんだ。Pandasに対するベンチマークを実行しているときに、Polarsに対しても実行することにした。PolarsもRustでバックエンドが組まれたスレッド化(rayon)ツールだから、良い勝負になると思ったんだ。そしたら、Polarsが大規模なデータセットのロードとフィルタリングでPandasを圧倒的に打ち負かしたんだ。1000万行以上だよ。インデックスがない限り、データセットのクエリ処理はこれ以上パフォーマンスが上がらないんじゃないかな。