[Python] Itération sur un DataFrame (pandas)

Itération sur un DataFrame (pandas) [Python] - Python - Programmation

Marsh Posté le 02-06-2021 à 18:14:39    

Bonjour à tous,  
 
Pour commencer, je tiens à préciser que je suis nouveau sur ce forum et ultra-débutant en Python.
Toutes mes excuses si ma question vous parait stupide.
Etant habitué à coder en Java, j'ai du mal à appréhender certains aspect du langage (sans parler du débuggage...)
Voici mon problème :  
J'ai un objet data de type <class 'pandas.core.frame.DataFrame'> dont voici un échantillon :  
                      value
timestamp                  
2020-08-11 06:00:00  2.9515
2020-08-11 07:00:00  2.9224
2020-08-11 08:00:00  2.9600
2020-08-11 09:00:00  2.8543
2020-08-11 10:00:00  2.8976
 
Je souhaiterais ajouter une colonne à ce dataFrame, cette nouvelle colonne contenant un filtre de la colonne value.
La nouvelle colonne "Filter" doit contenir des valeurs dont la formule est du type data['Filter'][i] = a * data['Value'][i] + b*data['Value'][i-1] +c* data['Filter'][i-1].
J'ai essayé de parcourir data avec un index i et récupérer la ligne correspondante avec data.iloc(i) mais j'obtiens une erreur "ValueError: No axis named 5 for object type DataFrame"
Quelqu'un pour éclairer ma lanterne ?
Merci !

Reply

Marsh Posté le 02-06-2021 à 18:14:39   

Reply

Marsh Posté le 03-06-2021 à 14:06:20    

Ok, je n'avais rien compris à la fonction iloc qui prend en paramètre un élément de l'index et pas son ordre (j'aurais du mettre un timestamp).
Si jamais un débutant tombe sur le même soucis que moi, j'ai utilisé les listes compréhension :  

Code :
  1. data['Filter'] = a*data['Value']
  2. data['Filter'] = [b*v1 + c*f1 for v1, f1 in zip(data['Value'].shift(1),data['Filter'].shift(1))]


Si quelqu'un a une meilleure solution je suis preneur !
Merci !

Reply

Marsh Posté le 04-06-2021 à 10:11:38    

Bon ça ne fonctionne pas, le calcul n'est pas fait de manière séquentielle.
Je vais utiliser la méthode DataFrame.itertuples()

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed