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

Os DataFrames podem ser muito grandes e podem conter centenas de filas e colunas. É necessário iterar sobre colunas de um DataFrame e realizar operações em colunas individualmente como regressão e muitas mais.

Podemos utilizar o for loop para iterar sobre colunas de uma DataFrame. A sintaxe básica do laço for é dada abaixo:

for value in sequence:
    # Body of Loop

Podemos utilizar vários métodos para executar o laço for sobre um DataFrame, por exemplo, a sintaxe getitem (o []), a função dataframe.iteritems(), a função enumerate() e utilizando o índice de um DataFrame.

Utilizar a sintaxe getitem ([]) para Iterate Over Columns in Pandas DataFrame

Podemos utilizar rótulos de coluna para executar o laço for sobre a DataFrame utilizando a sintaxe getitem([]). Por exemplo:

import pandas as pd

df = pd.DataFrame(
    [[10, 6, 7, 8], [1, 9, 12, 14], [5, 8, 10, 6]], columns=["a", "b", "c", "d"]
)

print(df)
print("------------------")
for column in df:
    print(df[column].values)

Resultado:

    a  b   c   d
0  10  6   7   8
1   1  9  12  14
2   5  8  10   6
------------------
[10  1  5]
[6 9 8]
[ 7 12 10]
[ 8 14  6]

A função values() é utilizada para extrair os elementos do objecto como uma lista.

Use dataframe.iteritems() para iterar sobre colunas no Dataframe Pandas

Pandas fornece a função dataframe.iteritems(), que ajuda a iterar sobre um DataFrame e devolve o nome da coluna e o seu conteúdo como série.

import pandas as pd

df = pd.DataFrame(
    [[10, 6, 7, 8], [1, 9, 12, 14], [5, 8, 10, 6]], columns=["a", "b", "c", "d"]
)

for (colname, colval) in df.iteritems():
    print(colname, colval.values)

Resultado:

a [10  1  5]
b [6 9 8]
c [ 7 12 10]
d [ 8 14  6]

Utilize enumerate() para Iterar sobre as Colunas Pandas

O enumerate() com DataFrame devolve o índice e o rótulo de coluna, o que nos permite iterar sobre ele.

import pandas as pd

df = pd.DataFrame(
    [[10, 6, 7, 8], [1, 9, 12, 14], [5, 8, 10, 6]], columns=["a", "b", "c", "d"]
)

for (index, colname) in enumerate(df):
    print(index, df[colname].values)

Resultado:

0 [10  1  5]
1 [6 9 8]
2 [ 7 12 10]
3 [ 8 14  6]

Podemos utilizar de forma muito eficiente qualquer um dos métodos acima referidos para iterar sobre o DataFrame. Também podemos executar operações como regressões sobre colunas individualmente. Por exemplo, podemos definir a última coluna como a variável independente e executar regressões OLS com outras colunas como variáveis dependentes, como se mostra no exemplo abaixo:

import pandas as pd
import statsmodels.api as sm
import numpy as np

df = pd.DataFrame(
    [[10, 6, 7, 8], [1, 9, 12, 14], [5, 8, 10, 6]], columns=["a", "b", "c", "d"]
)

for column in df:
    Y = df["d"]
    X = df[column]
    X = sm.add_constant(X)
    model = sm.OLS(X, Y)
    results = model.fit()
    print(results.params)

Resultado:

          0         1
d  0.094595  0.418919
          0     1
d  0.094595  0.75
          0         1
d  0.094595  0.959459
          0    1
d  0.094595  1.0