Aplicar uma Função a uma Coluna em Pandas Dataframe
-
Pandas
apply()
etransform()
Métodos -
Utilize
apply()
para aplicar uma função à coluna DataFrame Pandas -
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)
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