HOWTO · Pandas

Iterar pelas colunas de um DataFrame Pandas

Este tutorial demonstra como iterar através de colunas de um quadro de dados

Nesta página

Para iterar pelas colunas de um DataFrame do Pandas, percorra o DataFrame para obter o rótulo de cada coluna e use df[column] para selecioná-la como uma série. Use DataFrame.items() quando precisar do rótulo e da série juntos, ou enumerate() quando também precisar da posição de cada coluna.

Iterar pelas colunas com um laço for e df[column]

Um laço sobre um DataFrame percorre os rótulos de suas colunas. A cada iteração, df[column] seleciona a série correspondente àquele rótulo. Este exemplo imprime o rótulo de cada coluna seguido de seus valores como uma lista Python:

import pandas as pd

df = pd.DataFrame(
    {"name": ["Ada", "Lin"], "score": [9, 8]}
)

for column in df:
    print(column, df[column].tolist())
name ['Ada', 'Lin']
score [9, 8]

A variável do laço é um rótulo, como name ou score; ela não representa o número de uma linha. A série selecionada mantém o índice de linhas do DataFrame. Converta-a em lista com .tolist() somente quando uma lista for útil na etapa seguinte; .values, por sua vez, expõe uma representação semelhante a um array.

Iterar pelos rótulos das colunas e pelas séries com DataFrame.items()

DataFrame.items() produz cada rótulo de coluna junto com a série correspondente. Desempacote esse par para trabalhar diretamente com ambos. Este exemplo imprime cada rótulo e os valores de sua série:

import pandas as pd

df = pd.DataFrame(
    {"name": ["Ada", "Lin"], "score": [9, 8]}
)

for column_label, series in df.items():
    print(column_label, series.tolist())
name ['Ada', 'Lin']
score [9, 8]

Escolha este padrão quando a operação precisar do rótulo e da série correspondente no mesmo laço. Por exemplo, você pode aplicar uma etapa de formatação ou de resumo específica a cada coluna. Se for possível expressar um cálculo de uma só vez para todo o DataFrame, uma operação vetorizada do Pandas pode ser mais clara do que tratar as colunas uma por uma.

Obter a posição e o rótulo de cada coluna com enumerate()

Use enumerate() — função integrada do Python — em df.columns para associar cada rótulo à sua posição baseada em zero na sequência de colunas. O exemplo imprime a posição baseada em zero de cada coluna seguida de seu rótulo:

import pandas as pd

df = pd.DataFrame(
    {"name": ["Ada", "Lin"], "score": [9, 8]}
)

for position, column_label in enumerate(df.columns):
    print(position, column_label)
0 name
1 score

Aqui, position vale 0 para a primeira coluna, 1 para a segunda e assim por diante. Esse valor é diferente de um rótulo do índice de linhas, que identifica linhas e pode conter valores que não sejam números inteiros consecutivos. Use essa forma quando outra operação exigir tanto a ordem quanto o rótulo da coluna; se a posição não for necessária, use o laço básico ou DataFrame.items().