「Pandasのスピードを向上させ、ミリ秒単位で1000万行のデータセットを処理する方法」

Improving the speed of Pandas to process a dataset of 10 million rows in milliseconds.

Pandasを本来の意図通りに使用する

Midjourneyによる画像

はじめに

「素晴らしい… Pandasをn倍速くする方法に関する別の記事か」と言ったことは、私がPandasを使っている過去3年間で何度も言ったと思います。最近見たものでは、「Pandasを71,803倍速くする」と書かれていました。

しかし、私はそのような約束はしません。ただ、Pandasを可能な限り最速で使用する方法を示します。なぜなら、既に高速なものを高速化することはできないからです。

それは理にかなっていませんか?

こう聞きましょう。私が「右の耳に触れてください」と言ったとき、どの手を使いますか?もちろん、右手です。左手を頭の上に置いて右の耳に触れることはありません。それは奇妙でしょう。

同様に、Pandasのドキュメントで明示的に「遅い」とされている関数を最速のメソッドの代わりに使用するのも奇妙です。

それがこの記事が、Pandasで最も一般的なデータ操作のベストプラクティスを示す理由です。これらのベストプラクティスは、「常識」と考えてもらっても構いません。なぜなら、Pandasのメンテナーたちはライブラリが使用されるべき方法を意図しているからです。

効率的なインデックス付け

まず、最も基本的な操作から始めましょう。具体的には、行と列を選択する最速の方法を見ていきます。Pandasには2つのインデックス操作子、locilocがあります。これらの違いは、小規模なデータセットではあまり重要ではありませんが、データのサイズが増えるにつれてかなりの違いが出てきます。

まず、行または複数の行を選択する場合は、ilocが速いです。

一方、列をそのラベルで選択する場合は、locが最適です:

>>> tps.loc[:, ["f1", "f2", "f3"]]

列または行をサンプリングする場合、組み込みのsample関数が最速です。NumPyを使用してランダムなインデックスでサンプリングすることもできますが…

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more