コンテンツにスキップ

Pandasで行を繰り返し処理する方法

[

pandasで行ごとに反復処理する方法とその理由

.itertuples().iterrows()を使えば、比較的簡単に行を反復処理できますが、反復処理がDataFramesとの作業方法に最適とは限りません。実際、反復処理は進捗を早めるためのクイックな手段である一方、pandasを効果的に扱う際には大きな障害となる可能性があります。

このチュートリアルでは、pandas DataFrame内の行を反復処理する方法を学びますが、それをするべきではない理由も学びます。通常、反復処理はパフォーマンスのペナルティを伴い、pandasのやり方に反するため、避けるべきです。

このチュートリアルに沿って学ぶために、以下のリンクからデータセットとコードサンプルをダウンロードできます。

準備の最後の手続きとして、仮想環境を立ち上げていくつかのパッケージをインストールします。

  • Windows
  • Linux + macOS

Windows PowerShell

PS> python -m venv venv
PS> venv\Scripts\activate
(venv) PS> python -m pip install pandas httpx codetiming

Shell

$ python -m venv venv
$ source venv/bin/activate
(venv) $ python -m pip install pandas httpx codetiming

pandasのインストールは驚くことではありませんが、他のパッケージについては疑問が生じるかもしれません。httpxパッケージは、例の一部としていくつかのHTTPリクエストを行うために使用され、codetimingパッケージはパフォーマンスの比較を行うために使用されます。

これで、行ごとに反復処理する方法、反復処理を避けるべき理由、反復処理に頼る前に取るべき他のオプションについて学ぶ準備が整いました。

pandasでDataFrameの行を反復処理する方法

一般的には珍しいですが、DataFrame内で反復処理を行うことができる状況もあります。これらの状況は、以下のような場合に起きることがよくあります。

  • pandas DataFrameの情報を順次別のAPIに渡す必要がある場合
  • 各行の操作が副作用、例えばHTTPリクエストを行う必要がある場合
  • DataFrame内のさまざまな列に関わる複雑な操作を実行する必要がある場合
  • パフォーマンスのペナルティを気にしない場合、たとえばデータの処理がボトルネックではない、データセットが非常に小さい、あるいは個人的なプロジェクトの場合

pandasでループを使う一般的なユースケースは、データをインタラクティブに探索し、実験する場合です。これらの場合、パフォーマンスは通常あまり問題ではありません。データの行を反復処理することで、個々の行を表示し、調査することができます。この経験に基づいて、後でより効果的なアプローチを実装することができます。

より永続的なユースケースの例として、DataFrame内のURLのリストがある場合を想像してみてください。このURLがオンライン上であるかどうかをチェックしたいとします。