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

Iteración en Pandas

El comportamiento de la iteración básica en objetos Pandas depende del tipo. Al iterar sobre Series, es equivalente a un array. Otros datos estructurados (como DataFrame y Panel) siguen una sintaxis similar a dict, iterando sobre las claves del objeto.

En resumen, la iteración básica (for i en objeto) produce −

Series − Valor DataFrame − Etiqueta de columna Panel − Etiqueta de elemento

Iteración de DataFrame

El iterado de DataFrame devuelve los nombres de las columnas. Vamos a ver un ejemplo.

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

Su salida es la siguiente

   A
 C
 D
 x
 y

Para recorrer las filas de DataFrame, podemos usar las siguientes funciones-

iteritems(): − Iterar sobre pares (clave, valor) iterrows() − Recorrer las filas en forma de pares (índice, serie) itertuples() − Recorrer las filas en forma de namedtuples

iteritems():

Recorrer cada columna como clave, usar pares de valores con etiquetas como clave y los valores de la columna como objetos Series.

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

Resultados de ejecución:

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

Se puede ver que cada columna se itera como par clave-valor en la serie.

iterrows()

iterrows() devuelve un iterador que genera cada valor de índice y una secuencia que contiene cada fila de datos.

 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

Resultados de ejecución:

0      col1    1.529759
   col2    0.762811
   col3   -0.634691
Nombre: 0, tipo: flotante64
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

Dado que iterrows() recorre filas, no se conservará el tipo de datos en la fila. 0,1,2es el índice de fila, col1,col2,col3es el índice de columna.

itertuples()

El método itertuples() devuelve un iterador que genera un tupla nombrada para cada fila del DataFrame. El primer elemento de la tupla será el valor de índice correspondiente de la fila, y el resto de los valores son los valores de la fila.

 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

Resultados de ejecución:

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)
Nota:No intente modificar ningún objeto mientras itera. La iteración se utiliza para leer; el iterador devuelve una copia del objeto original (vista), por lo que los cambios no se reflejarán en el objeto 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

Resultados de ejecución:

    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

Observación, no se refleja ningún cambio.