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