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