HOWTO · Pandas

Como Iterar Através de Linhas de um DataFrame em Pandas

Podemos iterar sobre linhas em Pandas usando o atributo index, loc(), iloc(), iterrows(), itertuples(), iteritems() e apply() métodos.

Nesta página

Podemos fazer loop através das linhas de um Pandas DataFrame utilizando o atributo index do DataFrame. Também podemos iterar através das linhas de um DataFrame Pandas utilizando loc(), iloc(), iterrows(), itertuples(), iteritems() e apply() métodos de objetos DataFrame.

Utilizaremos o quadro de dados abaixo como um exemplo nas seções seguintes.

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)

Resultado:

       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 por meio de linhas no Pandas DataFrame

O atributo Pandas DataFrame index dá um objeto de intervalo desde a linha superior até a linha inferior de um DataFrame. Podemos utilizar o intervalo para iterar sobre as linhas em 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])
    )

Resultado:

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

Ele adiciona Income_1 e Income_2 de cada linha e imprime a renda total.

loc[] Método para Iterar através de linhas de DataFrame em Python

O método loc[] é utilizado para acessar uma fila de cada vez. Quando utilizamos o método loc[] dentro do laço através do DataFrame, podemos iterar através das linhas do 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"])
    )

Resultado:

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

Aqui, range(len(df)) gera um objeto de intervalo para fazer loop sobre linhas inteiras no DataFrame.

iloc[] método para Iterar através de linhas do DataFrame em Python

O atributo Pandas DataFrame iloc também é muito semelhante ao atributo loc. A única diferença entre loc e iloc é que em loc temos que especificar o nome da linha ou coluna a ser acessada enquanto em iloc especificamos o índice da linha ou coluna a ser acessada.

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])
    )

Resultado:

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

Aqui o índice 0 representa a primeira coluna do DataFrame, ou seja, Date, o índice 1 representa a coluna Income_1 e o índice 2 representa a coluna Income_2.

pandas.DataFrame.iterrows() para iterar em pandas de linhas

pandas.DataFrame.iterrows() retorna o índice da linha e os dados completos da linha como uma Series. Portanto, poderíamos utilizar esta função para iterar sobre as linhas em 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"])
    )

Resultado:

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 Linhas Pandas

pandas.DataFrame.itertuples retorna um objeto para iterar sobre tuplos para cada linha com o primeiro campo como um índice e os campos restantes como valores de coluna. Portanto, também poderíamos utilizar esta função para iterar sobre linhas em 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))

Resultado:

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 linhas de pandas

pandas.DataFrame.apply retorna um DataFrame
como resultado da aplicação da função dada ao longo do eixo dado do DataFrame.

Sintaxe:

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

Onde, func representa a função a ser aplicada e axis representa o eixo ao longo do qual a função é aplicada. Podemos utilizar axis=1 ou axis = 'columns' para aplicar a função a cada linha.

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,
    )
)

Resultado:

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

Aqui, a palavra-chave lambda é utilizada para definir uma função em linha que é aplicada a cada linha.