1. ホーム
  2. パイソン

[解決済み】pandasでdataframeをループする最も効率的な方法は何ですか?

2022-03-24 10:18:59

質問

データフレーム内の財務データに対して、独自の複雑な操作を逐次的に行いたい。

例えば、私は以下のMSFT CSVファイルを使用しています。 ヤフーファイナンス :

Date,Open,High,Low,Close,Volume,Adj Close
2011-10-19,27.37,27.47,27.01,27.13,42880000,27.13
2011-10-18,26.94,27.40,26.80,27.31,52487900,27.31
2011-10-17,27.11,27.42,26.85,26.98,39433400,26.98
2011-10-14,27.31,27.50,27.02,27.27,50947700,27.27

....

その後、次のようにしています。

#!/usr/bin/env python
from pandas import *

df = read_csv('table.csv')

for i, row in enumerate(df.values):
    date = df.index[i]
    open, high, low, close, adjclose = row
    #now perform analysis on open/close based on date, etc..

それが最も効率的な方法なのでしょうか?pandasがスピードに重点を置いていることを考えると、インデックスも取得する方法で値を反復する特別な関数があるはずだと思うのですが(おそらくメモリ効率を上げるためにジェネレータを通して)? df.iteritems 残念ながら、列ごとの反復処理しかできません。

解決方法は?

pandas の最新バージョンでは、行を反復処理するための組み込み関数が追加されました。

for index, row in df.iterrows():

    # do some logic here

また、より高速にしたい場合は itertuples()

しかし、unutbuの提案する、行の反復を避けるためにnumpyの関数を使用することが、最も速いコードを生成します。