DataFrameの行を繰り返し処理する方法
pandasのDataFrameで行を反復処理する場合、代表的な方法としてiterrows()とitertuples()があります。これらはDataFrameを1行ずつ処理するために使われますが、それぞれの特性やパフォーマンスに違いがあります。
iterrows()を使う方法
iterrows()は、DataFrameの各行をSeriesとして返すジェネレータです。行のインデックスとrowを取得できます。
import pandas as pd
df = pd.DataFrame({'c1': [10, 11, 12], 'c2': [100, 110, 120]})
for index, row in df.iterrows():
print(row['c1'], row['c2'])
注意点: 各行はSeriesとして返されるため、dtypeが行ごとに変わることがあり、パフォーマンスもそれほど高くありません。
itertuples()を使う方法
itertuples()は、各行をnamedtupleとして返すため、iterrows()よりも高速です。データ型も保たれ、特に大きなデータセットでは効率的です。
for row in df.itertuples():
print(row.c1, row.c2)
メリット: itertuples()は、パフォーマンスが優れており、dtypeも保たれますが、カラム名に無効なPython識別子がある場合は注意が必要です。
パフォーマンスの比較
小規模なDataFrameではiterrows()でも問題ありませんが、行数が多い場合や速度が重要な場合にはitertuples()の方が効率的です。例えば、iterrows()は1000行程度のデータであれば問題なく使えますが、それ以上の行数ではitertuples()が推奨されます。
pandasのDataFrameを反復処理する際には、パフォーマンスを考慮してiterrows()かitertuples()を使い分けましょう。大規模なデータセットや高速処理が必要な場合には、itertuples()を選ぶのが賢明です。