Aplicar uma Função a uma Coluna em Pandas Dataframe

Sathiya Sarathi 30 janeiro 2023
  1. Pandas apply() e transform() Métodos
  2. Utilize apply() para aplicar uma função à coluna DataFrame Pandas
  3. Utilize transform() para aplicar uma função à coluna Pandas DataFrame
Aplicar uma Função a uma Coluna em Pandas Dataframe

Em Pandas, colunas e dataframes podem ser transformados e manipulados utilizando métodos tais como apply() e transform(). As transformações desejadas são transmitidas como argumentos para os métodos como funções. Cada método tem as suas diferenças subtis e utilidade. Este artigo introduzirá como aplicar uma função a uma coluna ou a todo um quadro de dados.

Pandas apply() e transform() Métodos

Tanto os métodos apply() como transform() funcionam em colunas individuais e em todo o quadro de dados. O método apply() aplica a função ao longo de um eixo especificado. Passa as colunas como um dataframe para a função personalizada, enquanto que um método transform() passa as colunas individuais como pandas Series para a função personalizada.

A saída do método apply() é recebida sob a forma de um dataframe ou Series dependendo da entrada, enquanto que como uma sequência para o método transform(). Tanto a sintaxe dos métodos apply() como transform() assemelham-se aos mesmos:

Dataframe.apply(customFunction, axis=0)
Dataframe.transform(customFunction, axis=0)

Os argumentos correspondem a

  • customFunction: a função a ser aplicada ao dataframe ou à série.
  • axis: 0 refere-se a 'rows', e 1 refere-se a 'columns'; a função deve ser aplicada em filas ou colunas.

Utilize apply() para aplicar uma função à coluna DataFrame Pandas

Agora dominamos o básico, vamos deitar as mãos aos códigos e compreender como utilizar o método apply() para aplicar uma função a uma coluna de dados.

Utilizaremos o exemplo de quadro de dados como abaixo.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)

aplicar uma função a uma coluna dataframe

O código de exemplo para aplicar uma função a toda a DataFrame é mostrado abaixo.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df = df.apply(add_2)
print(df)

Resultado:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A   B   C
0  3   4   5
1  6   7   8
2  9  10  11

Como se viu acima, a função pode ser aplicada a todo o DataFrame.

Aplicar uma função a uma única coluna

Vamos ver o que acontece quando a função é aplicada ao longo de uma única coluna.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df["A"] = df["A"].apply(add_2)
print(df)

# or #

df["A"].transform(add_2)
print(df)

Resultado:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A  B  C
0  3  2  3
1  6  5  6
2  9  8  9

Outro exemplo de aplicação de uma função a uma única coluna

import numpy as np
import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {"A": [20, 30, 15, 25, 20], "B": [4, 5, 6, 4, 6], "C": [12, 15, 13, 12, 14]}
)
print("Initial DataFrame:")
print(data)

print("")

updated_df = data.apply(lambda x: x - 5 if x.name == "A" else x)
print("Updated DataFrame:")
print(updated_df)

Resultado:

Initial DataFrame:
    A  B   C
0  20  4  12
1  30  5  15
2  15  6  13
3  25  4  12
4  20  6  14

Updated DataFrame:
    A  B   C
0  15  4  12
1  25  5  15
2  10  6  13
3  20  4  12
4  15  6  14

Aqui, aplicamos a função lambda definida para cada coluna no DataFrame. A função subtrai o valor de cada coluna por 5 apenas se o nome da coluna for A.

import numpy as np
import pandas as pd

roll_no = [501, 502, 503, 504, 505]

data = pd.DataFrame(
    {"A": [20, 30, 15, 25, 20], "B": [4, 5, 6, 4, 6], "C": [12, 15, 13, 12, 14]}
)
print("Initial DataFrame:")
print(data)

print("")

data["A"] = data["A"].apply(lambda x: x - 5)
print("Updated DataFrame:")
print(data)

Resultado:

Initial DataFrame:
    A  B   C
0  20  4  12
1  30  5  15
2  15  6  13
3  25  4  12
4  20  6  14

Updated DataFrame:
    A  B   C
0  15  4  12
1  25  5  15
2  10  6  13
3  20  4  12
4  15  6  14

Aplica a função lambda apenas à coluna A do DataFrame, e finalmente atribuímos os valores devolvidos à coluna A do DataFrame existente.

Utilize transform() para aplicar uma função à coluna Pandas DataFrame

Vejamos como utilizar o método transform() para aplicar uma função a uma coluna de dados. Utilizaremos o mesmo exemplo de dataframe que o anterior.

O código de exemplo para aplicar uma função a todo o DataFrame é mostrado abaixo.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df = df.transform(add_2)
print(df)

Resultado:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A   B   C
0  3   4   5
1  6   7   8
2  9  10  11

Como visto acima, a função pode ser aplicada a todo o dataframe.

Aplicar uma função a uma única coluna

Vamos ver o que acontece quando a função é aplicada ao longo de uma única coluna.

import pandas as pd
import numpy as np

df = pd.DataFrame([[1, 2, 3], [4, 5, 6], [7, 8, 9]], columns=["A", "B", "C"])
print(df)


def add_2(x):
    return x + 2


df["A"] = df["A"].transform(add_2)
print(df)

Resultado:

   A  B  C
0  1  2  3
1  4  5  6
2  7  8  9
   A  B  C
0  3  2  3
1  6  5  6
2  9  8  9

Artigo relacionado - Pandas DataFrame