コンテキスト:私は株式取引戦略のバックテスターを構築しています。 OHLCVデータを含む2446個のCSVがあります。各CSVはデータの1取引日です。また、パフォーマンスが懸念された後、これらのファイルを約140万行の単一のCSVに連結しました。それについては後で詳しく説明します。Pandasのデータフレームの一覧上の反復実行のパフォーマンスは大きく変わります
開発の初期段階では、各ファイルをpd.read_csvで1つずつ読み込み、各データフレームをリストに追加していました。次に、データフレームのリストでシミュレーションを実行します。このテクニックを使用するとシミュレーション自体は97秒かかります。
all_days = []
for file in (os.listdir("C:/Users/XYZ/Desktop/EURUSD/CSV")):
all_days.append(pd.read_csv("C:/Users/XYZ/Desktop/EURUSD/CSV/"+file))
私はプログラム全体をより速く動かしたがっていました。だから、私は1つのCSVを作成し、groupbyを使用して毎日のデータを分離しました。確かに、データフレームのリストの作成ははるかに迅速です。しかしここで私はループのために投げつけられているところです:シミュレーションはかなり遅くなりました。のようにデータフレームのリストをまだ受信しているにもかかわらず、シミュレーションは〜172秒になります。また、シミュレーションがまったく同じ結果を生むことに注目することも重要です。
df = pd.read_csv("C:/Users/XYZ/Desktop/EURUSD/Concatenated CSVs/EURUSD.csv",
index_col=0,parse_dates=True)
df['Time'] = pd.to_datetime(df['Time'])
all_days = []
for each in df.groupby(pd.Grouper(key='Time',freq='D')):
if each[1].empty is False:
all_days.append(each[1])
パフォーマンスが低下する原因は何でしょうか?
私は何かをするかもしれないと思う。 2番目のコードブロックのforループ内で、リストに追加する前にデータフレームのインデックスをリセットすると、シミュレーションの実行時間が約172秒から約82秒に短縮されました。このパンダの専門家から聞くのが大好きです。 – jnic1989