Pandas Python - Itération

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 considérée comme un tableau et une itération de base produit les valeurs. D'autres structures de données, comme DataFrame et Panel, suivent ladict-like convention d'itération sur le keys des objets.

En bref, itération de base (pour i dans l'objet) produit -

  • Series - valeurs

  • DataFrame - étiquettes de colonne

  • Panel - étiquettes d'articles

Itérer un DataFrame

L'itération d'un DataFrame donne des noms de colonnes. Prenons l'exemple suivant pour comprendre la même chose.

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

Ses output est comme suit -

A
C
D
x
y

Pour parcourir les lignes du DataFrame, nous pouvons utiliser les fonctions suivantes -

  • iteritems() - pour parcourir les paires (clé, valeur)

  • iterrows() - itérer sur les lignes sous forme de paires (index, série)

  • itertuples() - itérer sur les lignes comme des tuples nommés

iteritems ()

Itère sur chaque colonne comme clé, paire de valeurs avec étiquette comme clé et valeur de colonne comme objet Series.

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

Ses output est comme suit -

col1 0    0.802390
1    0.324060
2    0.256811
3    0.839186
Name: col1, dtype: float64

col2 0    1.624313
1   -1.033582
2    1.796663
3    1.856277
Name: col2, dtype: float64

col3 0   -0.022142
1   -0.230820
2    1.160691
3   -0.830279
Name: col3, dtype: float64

Remarquez que chaque colonne est itérée séparément en tant que paire clé-valeur dans une série.

iterrows ()

iterrows () renvoie l'itérateur produisant chaque valeur d'index avec une série contenant les données dans 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

Ses output est comme suit -

0  col1    1.529759
   col2    0.762811
   col3   -0.634691
Name: 0, dtype: float64

1  col1   -0.944087
   col2    1.420919
   col3   -0.507895
Name: 1, dtype: float64
 
2  col1   -0.077287
   col2   -0.858556
   col3   -0.663385
Name: 2, dtype: float64
3  col1    -1.638578
   col2     0.059866
   col3     0.493482
Name: 3, dtype: float64

Note - Parce que iterrows()itérer sur les lignes, il ne conserve pas le type de données sur la ligne. 0,1,2 sont les indices de ligne et col1, col2, col3 sont les indices de colonne.

itertuples ()

La méthode itertuples () retournera un itérateur donnant un tuple nommé pour chaque ligne du DataFrame. Le premier élément du tuple sera la valeur d'index correspondante de la ligne, tandis que les valeurs restantes 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

Ses output est comme suit -

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)

Note- N'essayez pas de modifier un objet pendant l'itération. L'itération est destinée à la lecture et l'itérateur renvoie une copie de l'objet d'origine (une vue), ainsi les modifications ne seront pas reflétées sur l'objet d'origine.

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

Ses output est comme suit -

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

Observez, aucun changement n'est reflété.