
.iterrows()
は、Pandas で DataFrame を操作する際によく使われるメソッドのひとつです。
この記事では .iterrows()
の基本的な使い方から、活用シーン、注意点までなるべくわかりやすく解説します。
.iterrows() とは?
pandas
の .iterrows()
は、DataFrameの各行を1行ずつ処理したいときに使える便利なメソッドです。
通常、pandas
では「ベクトル化(まとめて処理)」が高速で効率的ですが、処理内容が行ごとに異なる場合や、外部システムと連携する場合などには .iterrows()
が活躍します。
このメソッドを使うと、DataFrame の各行をループで1つずつ取り出して処理できます。
各ループでは (インデックス, 行データ(Series))
のタプルが返されます。
具体例①:基本的な使い方
まずは、簡単なサンプルデータを使って .iterrows()
の動きを見てみましょう。
1 2 3 4 5 6 7 8 9 10 |
import pandas as pd df = pd.DataFrame({ '名前': ['田中', '佐藤', '鈴木'], '年齢': [25, 30, 22] }) for index, row in df.iterrows(): print(f"インデックス: {index}, 名前: {row['名前']}, 年齢: {row['年齢']}") |
このコードでは:
df.iterrows()
によって各行を取り出すindex
はその行のインデックス番号row
は行全体を表す Series で、列名をキーにして値を取り出せる
出力は以下のようになります:
1 2 3 4 |
インデックス: 0, 名前: 田中, 年齢: 25 インデックス: 1, 名前: 佐藤, 年齢: 30 インデックス: 2, 名前: 鈴木, 年齢: 22 |
このように、各行に対して柔軟な処理が書けるのが .iterrows()
の特徴です。
具体例②:条件に応じた処理に使う
.iterrows()
は、行の内容に応じて何か特定の処理をしたいときに便利です。
1 2 3 4 |
for index, row in df.iterrows(): if row['年齢'] >= 30: print(f"{row['名前']}さんは30歳以上です。") |
このように:
- 各行の
年齢
をチェックして - 条件に合う行だけ処理をする
フィルタや条件付き処理を柔軟に書ける点が強みです。
.iterrows() を使うときの注意点
便利な .iterrows()
ですが、使う際にいくつか注意すべきポイントがあります。
処理が遅くなりがち
.iterrows()
は Python のループとして実行されるため、データ量が多いと処理速度がかなり遅くなります。
特に数千〜数万行以上の DataFrame を扱う時は、vectorized(ベクトル化)処理
や apply()
を検討した方がよいです。
行のデータ型は Series(dtypeが混在)
row
の正体は pandas.Series
なので、各列のデータ型(int, float, str など)が混在しています。
そのため、型変換が必要になるケースもあります。
行に対して代入するときは注意
.iterrows()
を使って行の値を書き換えようとしても、DataFrame 本体には反映されません。
1 2 3 |
for index, row in df.iterrows(): row['年齢'] = row['年齢'] + 1 # 元のdfには反映されない |
上記のように書き換えても、元の df
は変わらないので注意しましょう。
値を変更したい場合は、インデックスを使って直接代入する必要があります。
1 2 3 |
for index, row in df.iterrows(): df.at[index, '年齢'] = row['年齢'] + 1 |
このように df.at[]
を使えば、正しく更新されます。
.iterrows() の活用シーン
処理内容が行ごとに異なる場合や、外部システムと連携する場合などに .iterrows()
は活躍します。
- ルールベースで行ごとに処理を行いたいとき(条件分岐など)
- たとえば、列の値に応じて異なる処理をしたり、特定の条件に合う行だけを別の形に変換したいときに便利です。
- 外部APIとやりとりして、1行ずつ情報を付加したいとき
- APIリクエストは基本的に「1件ずつ送る」必要があるため、各行のデータを使って外部サービスから情報を取得し、DataFrameに追加するときに使われます。
- データクレンジングなどで複雑な処理が必要なとき
- 例えば、住所の正規化、文字列の分割・再結合、あるいは複数列の値を組み合わせた独自ルールの修正など、単純な数値演算では処理しづらいケースに適しています。
特に「行ごとの処理内容がバラバラ」「簡単なベクトル演算では対応しづらい」ようなケースでは .iterrows()
が役立ちます。
まとめ
今回は Pandas の .iterrows()
メソッドについて解説しました。
.iterrows()
は DataFrame を「1行ずつ処理」したい時に便利なメソッド- 各行は
(index, row)
の形式で取り出され、row は Series として扱える - 条件付き処理やAPI連携など、柔軟な処理が必要なシーンに便利
- ただし、大量データには向かず、パフォーマンスに注意
- 値の書き換えには
df.at[]
などを使う必要あり
扱いに注意は必要ですが、正しく使えば非常に便利なメソッドです。
DataFrame に対して「1行ずつ丁寧に処理したい」場合は、ぜひ .iterrows()
を活用してみましょう。