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

  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

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

  • Como eliminar a coluna Pandas DataFrame
  • Como obter os cabeçalhos da coluna Pandas DataFrame como uma lista