English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Iteration Pandas

Le comportement de l'itération de base sur les objets Pandas dépend du type. Lors de l'itération sur une série, elle est équivalente à un tableau. D'autres structures de données (comme DataFrame et Panel) suivent une syntaxe similaire à dict, en itérant sur les clés de l'objet.

En résumé, l'itération de base (for i dans l'objet) produit −

Série − valeur DataFrame − étiquette de colonne Panel − item étiquette

Iteration DataFrame

L'itération d'un DataFrame donne les noms de colonnes. Regardons l'exemple suivant.

 import pandas as pd
 import numpy as np
  
 N=20
 df = pd.DataFrame({
    'A': pd.date_range(start='2016-01-01',periods=N,freq='D'),
    'x': np.linspace(0,stop=N-1,num=N),
    'y': np.random.rand(N),
    'C': np.random.choice(['Low','Medium','High'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
    })
 for col in df:
    print col

Son output est le suivant

   A
 C
 D
 x
 y

Pour parcourir les lignes d'un DataFrame, nous pouvons utiliser les fonctions suivantes-

iteritems() − Itérer sur les paires (clé, valeur) iterrows() − Parcourir les lignes sous forme de paires (index, série) itertuples() − Parcourir les lignes sous forme de namedtuples

iteritems()

Parcourir chaque colonne en tant que clé, et les paires de valeurs étiquetées en tant que clé, et les valeurs de colonne en tant que série d'objets.

  import pandas as pd
  import numpy as np
  
  
  
 df = pd.
  DataFrame(np.
  random.randn(4,3),columns=[
  'col1',
  'col2',
  'col3'])
  
 
  for key,value
   in df.
  iteritems():
  
    print key,value

Résultat de l'exécution :

col1 0    0.802390
1    0.324060
2    0.256811
3    0.839186
Nom: col1, dtype: float64
col2 0    1.624313
1   -1.033582
2    1.796663
3    1.856277
Nom: col2, dtype: float64
col3 0   -0.022142
1   -0.230820
2    1.160691
3   -0.830279
Nom: col3, dtype: float64

On peut voir que chaque colonne est itérée comme un couple clé-valeur dans une série.

iterrows()

iterrows() retourne un itérateur générant chaque valeur d'index et une séquence contenant les données de chaque ligne.

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
 for row_index,row in df.iterrows():
    print row_index,row

Résultat de l'exécution :

0  col1    1.529759
   col2    0.762811
   col3   -0.634691
Nom: 0, dtype: float64
1  col1   -0.944087
   col2    1.420919
   col3   -0.507895
Nom: 1, dtype: float64
 
2  col1   -0.077287
   col2   -0.858556
   col3   -0.663385
Nom: 2, dtype: float64
3  col1    -1.638578
   col2     0.059866
   col3     0.493482
Nom: 3, dtype: float64

Comme iterrows() parcourt les lignes, le type de données de la ligne ne sera pas conservé. 0,1,2est l'index de ligne, col1,col2,col3est l'index de colonne.

itertuples()

itertuples() méthode retourne un itérateur, générant un tuple nommé pour chaque ligne de DataFrame. Le premier élément du tuple sera la valeur d'index correspondante de la ligne, et les autres valeurs sont les valeurs de la ligne.

 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
 for row in df.itertuples():
     print row

Résultat de l'exécution :

Pandas(Index=0, col1=1.5297586201375899, col2=0.76281127433814944, col3=-
0.6346908238310438)
Pandas(Index=1, col1=-0.94408735763808649, col2=1.4209186418359423, col3=-
0.50789517967096232)
Pandas(Index=2, col1=-0.07728664756791935, col2=-0.85855574139699076, col3=-
0.6633852507207626)
Pandas(Index=3, col1=0.65734942534106289, col2=-0.95057710432604969,
col3=0.80344487462316527)
Remarque :Ne tentez pas de modifier aucun objet lors de l'itération. L'itération est utilisée pour lire, l'itérateur retourne une copie de l'objet original (vue), par conséquent, les modifications ne seront pas reflétées sur l'objet original.
 import pandas as pd
 import numpy as np
 df = pd.DataFrame(np.random.randn(4,3),columns = ['col1','col2','col3'])
 for index, row in df.iterrows():
    row['a'] = 10
 print df

Résultat de l'exécution :

    col1       col2       col3
0  -1.739815   0.735595  -0.295589
1   0.635485   0.106803   1.527922
2  -0.939064   0.547095   0.038585
3  -1.016509  -0.116580  -0.523158

Observation, aucune modification n'a été reflétée.