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é.