2014-04-29 1 views
0

J'utilise iterrows() pour effectuer des calculs sur un ensemble de données utilisant un horodatage comme index. Voir ci-dessous à titre d'exemple:Démarrage de la boucle iterrows() sur un index particulier

>>> aapl.head() 
Date  Open High Low Close Volume Adj Close               
1980-12-12 28.75 28.88 28.75 28.75 16751200  3.15 
1980-12-15 27.38 27.38 27.25 27.25 6281600  2.99 
1980-12-16 25.38 25.38 25.25 25.25 3776000  2.77 
1980-12-17 25.88 26.00 25.88 25.88 3087200  2.84 
1980-12-18 26.62 26.75 26.62 26.62 2623200  2.92 

je comptais faire mon calcul en utilisant for index in aapl.iterrows() mais je suis à la recherche seulement à des valeurs dans une année donnée et l'ensemble de données contient beaucoup plus de données que cela. Comment puis-je faire démarrer ma boucle sur une valeur d'index particulière (à savoir l'horodatage dans ce cas) et finir sur une autre?

Un grand merci pour vos suggestions.

+1

Vous devriez montrer ce que vous avez l'intention de faire en ce qui concerne les opérations. Le bouclage est généralement ** pas ** une bonne solution. – Jeff

+1

Vous devriez également pouvoir créer un sous-ensemble de cette base de données en utilisant les méthodes ici: http://pandas.pydata.org/pandas-docs/dev/timeseries.html#datetime-indexing – exp1orer

Répondre

0

La plupart des fonctions d'itération python ont un argument de démarrage optionnel. Les DataFrames ne le sont pas, mais les DataFrames sont généralement beaucoup plus faciles à découper. Je propose donc une tranche itérer alors:

for row, value in aapl.loc['1980-12-18':].iterrows(): 
    # do stuff. 

Ce qui se passe dans .loc dépend de ce que vous voulez. Vous pouvez même être en mesure d'utiliser .ix[<YEAR>], comme .ix['1990'].

+0

Merci pour la réponse! Cela semble être une solution logique mais je continue d'obtenir l'erreur suivante: '>>> pour la ligne, valeur dans join.loc ['2012-12-18':]. Iterrows(): ... ligne d'impression [ 'Close_NCBC'] retraçage (le plus récent appel dernier): fichier "", ligne 2, TypeError dans imprimer row [ 'Close_NCBC']: objet 'Timestamp' n'a pas d'attribut '__getitem __' ' Tout ce que je pourrait être négliger? – neanderslob

+0

Vous ne voulez pas de valeur ['Close_NCBC']? – user1827356

+0

@ user1827356 Merci pour la réponse. En effet je le fais; le script ci-dessus était juste pour tester la solution proposée pour exécuter la boucle for à un point de départ donné. L'erreur en cours provient de l'utilisation de l'horodatage dans la boucle; la commande d'impression n'apparaît pas être le problème. – neanderslob

Questions connexes