私はいくつかの奇妙なログファイルを丸呑みして pandas.DataFrame に入れるPython スクリプトを持っているので、いくつかの統計分析を行うことができます。ログは 5 分間隔でのプロセスのスナップショットであるため、各ファイルを読み取るときに、最後のファイルから入力されたデータに対して新しい行をチェックして、以前と同じプロセスであるかどうかを確認します (この場合、既存のレコードの時間)。問題なく動作しますが、個々のログが 100,000 行を超えると驚くほど遅くなる可能性があります。
パフォーマンスをプロファイリングすると、目立ったものはほとんどありませんが、この単純な関数に多くの時間が費やされていることがわかります。これは基本的に、シリーズを前のログから持ち越された行と比較しています。
def carryover(s,df,ids):
# see if pd.Series (s) matches any rows in pd.DataFrame (df) from the given indices (ids)
for id in ids:
r = df.iloc[id]
if (r['a']==s['a'] and
r['b']==s['b'] and
r['c']==s['c'] and
r['d']==s['d'] and
r['e']==s['e'] and
r['f']==s['f'] ):
return id
return None
and
は短絡しているので、これはかなり効率的だと思います...しかし、もっと良い方法はありますか?
それ以外の場合、これをより速く実行するために他にできることはありますか? 結果のDataFrameはRAMに問題なく収まるはずですが、キャッシュなどが最適であることを確認するために設定する必要があるかどうかはわかりません。皆さんありがとう!