Pandas DataFrame の行を反復処理するにはどうすればよいですか? 質問する

Pandas DataFrame の行を反復処理するにはどうすればよいですか? 質問する

私はパンダのデータフレームを持っていますdf:

   c1   c2
0  10  100
1  11  110
2  12  120

このデータフレームの行を反復処理するにはどうすればよいでしょうか。各行について、列の名前でその要素 (セル内の値) にアクセスします。例:

for row in df.rows:
    print(row['c1'], row['c2'])

私は見つけた同様の質問は、次のいずれかを使用することを推奨します。

  • for date, row in df.T.iteritems():
    
  • for row in df.iterrows():
    

rowしかし、そのオブジェクトが何であるか、またそれをどのように操作すればよいかがわかりません。

ベストアンサー1

DataFrame.iterrowsインデックスと行の両方を(シリーズとして)生成するジェネレータです。

import pandas as pd

df = pd.DataFrame({'c1': [10, 11, 12], 'c2': [100, 110, 120]})
df = df.reset_index()  # make sure indexes pair with number of rows

for index, row in df.iterrows():
    print(row['c1'], row['c2'])
10 100
11 110
12 120

義務的な免責事項ドキュメンテーション

pandasオブジェクトを反復処理するのは一般的に遅い多くの場合、行を手動で反復処理する必要はなく、次のいずれかの方法で回避できます。

  • 探すベクトル化された解決策: 組み込みメソッドや NumPy 関数、(ブール) インデックスなどを使用して、多くの操作を実行できます。
  • 一度に全データフレーム/シリーズで動作できない関数がある場合は、apply()値を反復する代わりに、関数の適用
  • 値に対して反復的な操作を行う必要があるが、パフォーマンスが重要な場合は、内部ループをcythonまたはnumbaで記述することを検討してください。パフォーマンスの向上このアプローチのいくつかの例については、セクションを参照してください。

さらに詳しく知りたい場合は、このスレッドの他の回答で iter* 関数の代替手段についてさらに詳しく説明しています。

おすすめ記事