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()を選ぶのが賢明です。