HOWTO · Pandas

Cómo iterar a través de filas de un DataFrame en Pandas

Podemos iterar sobre filas en Pandas usando los atributos index, loc(), iloc(), iterrows(), itertuples(), iteritems() y apply().

En esta página

Podemos recorrer las filas de un Pandas DataFrame usando el atributo index del DataFrame. También podemos iterar a través de filas de DataFrame Pandas usando los métodos loc(), iloc(), iterrows(), itertuples(), iteritems() y apply() de los objetos DataFrame.

Utilizaremos el siguiente DataFrame como ejemplo en las siguientes secciones.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})

print(df)

Producción :

       Date  Income_1  Income_2
0  April-10        10        20
1  April-11        20        30
2  April-12        10        10
3  April-13        15         5
4  April-14        10        40
5  April-16        12        13

Atributo index para iterar a través de filas en Pandas DataFrame

El atributo Pandas DataFrame index proporciona un objeto de rango desde la fila superior a la fila inferior de un DataFrame. Podemos usar el rango para iterar sobre filas en Pandas.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})

for i in df.index:
    print(
        "Total income in "
        + df["Date"][i]
        + " is:"
        + str(df["Income_1"][i] + df["Income_2"][i])
    )

Producción :

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

Agrega Income_1 e Income_2 de cada fila e imprime el ingreso total.

Método loc[] para iterar a través de filas de DataFrame en Python

El método loc[] se usa para acceder a una fila a la vez. Cuando usamos el método loc[] dentro del bucle a través de DataFrame, podemos iterar a través de filas de DataFrame.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})

for i in range(len(df)):
    print(
        "Total income in "
        + df.loc[i, "Date"]
        + " is:"
        + str(df.loc[i, "Income_1"] + df.loc[i, "Income_2"])
    )

Producción :

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

Aquí, range(len(df)) genera un objeto de rango para recorrer filas enteras en el DataFrame.

Método iloc[] para iterar a través de filas de DataFrame en Python

El atributo Pandas DataFrame iloc también es muy similar al atributo loc. La única diferencia entre loc e iloc es que en loc tenemos que especificar el nombre de la fila o columna a la que se debe acceder, mientras que en iloc especificamos el índice de la fila o columna a la que se debe acceder.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})

for i in range(len(df)):
    print(
        "Total income in " + df.iloc[i, 0] + " is:" + str(df.iloc[i, 1] + df.iloc[i, 2])
    )

Producción :

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

Aquí el índice 0 representa la primera columna de DataFrame, es decir, Date, el índice 1 representa la columna Income_1 y el índice 2 representa la columna Income_2.

pandas.DataFrame.iterrows() para iterar sobre las filas pandas

pandas.DataFrame.iterrows() devuelve el índice de la fila y todos los datos de la fila como una Series. Por lo tanto, podríamos usar esta función para iterar sobre filas en Pandas DataFrame.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})


for index, row in df.iterrows():
    print(
        "Total income in "
        + row["Date"]
        + " is:"
        + str(row["Income_1"] + row["Income_2"])
    )

Producción :

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

pandas.DataFrame.itertuples para iterar sobre las filas pandas

pandas.DataFrame.itertuples devuelve un objeto para iterar sobre tuplas para cada fila con el primer campo como índice y los campos restantes como valores de columna. Por lo tanto, también podríamos usar esta función para iterar sobre filas en Pandas DataFrame.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})


for row in df.itertuples():
    print("Total income in " + row.Date + " is:" + str(row.Income_1 + row.Income_2))

Producción :

Total income in April-10 is:30
Total income in April-11 is:50
Total income in April-12 is:20
Total income in April-13 is:20
Total income in April-14 is:50
Total income in April-16 is:25

pandas.DataFrame.apply para iterar sobre las filas pandas

pandas.DataFrame.apply devuelve un DataFrame
como resultado de aplicar la función dada a lo largo del eje dado del DataFrame.

Sintaxis:

DataFrame.apply(self, func, axis=0, raw=False, result_type=None, args=(), **kwds)

Donde, func representa la función que se aplicará y axis representa el eje a lo largo del cual se aplica la función. Podemos usar axis=1 o axis = 'columns' para aplicar la función a cada fila.

import pandas as pd

dates = ["April-10", "April-11", "April-12", "April-13", "April-14", "April-16"]
income1 = [10, 20, 10, 15, 10, 12]
income2 = [20, 30, 10, 5, 40, 13]

df = pd.DataFrame({"Date": dates, "Income_1": income1, "Income_2": income2})


print(
    df.apply(
        lambda row: "Total income in "
        + row["Date"]
        + " is:"
        + str(row["Income_1"] + row["Income_2"]),
        axis=1,
    )
)

Producción :

0    Total income in April-10 is:30
1    Total income in April-11 is:50
2    Total income in April-12 is:20
3    Total income in April-13 is:20
4    Total income in April-14 is:50
5    Total income in April-16 is:25
dtype: object

Aquí, la palabra clave lambda se usa para definir una función en línea que se aplica a cada fila.