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

Iterazione di Pandas

Il comportamento dell'iterazione di base su oggetti Pandas dipende dal tipo. Quando si itera su una Series, è equivalente a un array. Altre strutture dati (ad esempio DataFrame e Panel) seguono la sintassi simile a dict, ovvero si itera sulle chiavi dell'oggetto.

In sintesi, l'iterazione di base (for i in oggetto) produce −

Series − Valore DataFrame − Etichetta colonna Pannello − Item etichetta

Iterazione DataFrame

Iterare su un DataFrame restituisce i nomi delle colonne. Vediamo un esempio.

 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(['Basso','Medio','Alto'],N).tolist(),
    'D': np.random.normal(100, 10, size=(N)).tolist()
    })
 for col in df:
    print col

Il suo output è il seguente

   A
 C
 D
 x
 y

Per esplorare le righe di un DataFrame, possiamo utilizzare le seguenti funzioni-

iteritems() − Iterare sui pair (chiave, valore) iterrows() − Esplorare le righe in forma di coppia (indice, serie) itertuples() − Esplorare le righe in forma di namedtuples

iteritems()

Iterare su ogni colonna come chiave, trasformare le coppie di valori etichettati come chiave e i valori delle colonne come oggetti 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

Risultato dell'esecuzione:

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

Si può vedere che ogni colonna viene iterata come un valore chiave-piattaforma della serie.

iterrows()

iterrows() restituisce un iteratore che produce un'iterazione per ogni valore di indice e una sequenza che contiene i dati di ogni riga.

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

Risultato dell'esecuzione:

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

Poiché iterrows() scorre le righe, non mantiene il tipo di dati nella riga. 0,1,2 sono gli indici delle righe, col1, col2, col3 sono gli indici delle colonne.

itertuples()

Il metodo itertuples() restituisce un iteratore che genera un tupolo nomeato per ogni riga del DataFrame. Il primo elemento del tupolo sarà il valore dell'indice della riga corrispondente, mentre gli altri valori saranno i valori della riga.

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

Risultato dell'esecuzione:

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)
Attenzione:Non provare a modificare qualsiasi oggetto durante l'iterazione. L'iterazione viene utilizzata per leggere; l'iteratore restituisce una copia del'oggetto originale (vista), quindi le modifiche non si rifletteranno nell'oggetto originale.
 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

Risultato dell'esecuzione:

    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

Osservazione, non si è riscontrato alcun cambiamento.