Je veux effectuer mes propres opérations complexes sur des données financières dans des cadres de données de manière séquentielle.
Par exemple, j'utilise le fichier CSV MSFT suivant, provenant de Yahoo Finance :
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
....
Je fais ensuite ce qui suit :
#!/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..
Est-ce le moyen le plus efficace ? Étant donné l'accent mis sur la vitesse dans pandas, je suppose qu'il doit y avoir une fonction spéciale pour itérer à travers les valeurs de manière à récupérer également l'index (éventuellement à travers un générateur pour être efficace en mémoire) ? df.iteritems
ne fait malheureusement qu'itérer colonne par colonne.
6 votes
Avez-vous essayé d'écrire une fonction et de la passer à
df.apply()
?0 votes
Si vous voulez une efficacité mémoire, vous devriez envisager d'utiliser des opérations vectorielles (en utilisant des matrices et des vecteurs). Mais je ne connais pas pandas, donc je ne peux pas vous dire, si de telles opérations sont possibles là-bas.
3 votes
Citant
unutbu
NumPy semble supporter les opérations vectorielles (The key to speed with NumPy arrays is to perform your operations on the whole array at once
).1 votes
La question était spécifique à l'itération séquentielle, comme c'est très courant en finance, où la vectorisation n'est pas souvent possible. La réponse acceptée de Nick Crawford répond à cette question et recommande en outre d'utiliser la vectorisation lorsque cela est possible.