Como podemos usar uma função para modificar valores dentro do Pandas?
No vídeo 5 da série Programar não é escrever código, é resolver problemas, criamos uma função para retornar o nome da transportadora no nosso vídeo (que você pode conferir no final do post). Mas agora queremos chamar a função para completar os dados de nossa base em Excel.
Para isso, usamos o apply(). O apply() “aplica” uma função a uma coluna, linha ou célula de um dataframe no Pandas. Vamos a um exemplo simples: a função abaixo multiplica a coluna Quantidade de um dataframe por outra coluna chamada Preço Unitário.
01 02 | def geraTotal(pedidos): return pedidos[ "Quantidade" ] * pedidos[ "Preço Unitário" ] |
Vamos importar os dados da Dr. Paçoca e usar o apply() para chamar a função geraTotal. O argumento axis do apply() indica se ele vai se orientar pelas colunas (axis=0) ou pelas linhas (axis=1).
01 02 03 04 05 06 | import pandas as pd pedidos = pd.read_excel(URL) pedidos[ "Total" ] = pedidos. apply (geraTotal, axis = 1 ) display(pedidos) |
O apply funciona de modo simples… quando nossa função possui apenas um argumento… No nosso exemplo, a função transporte(pedidos, estado) pede dois argumentos: pedido, que é o valor total de cada linha do dataframe, e o estado, que é o destino da entrega. Para esses casos, precisamos “disfarçar” nossa função usando o lamdba.
O lambda é uma função que cria uma função anônima… Em Português, serve para empacotar cálculos e comandos em um só lugar (como qualquer função faz), mas sem precisarmos dar nome a ela. Para nós, ela servirá para “empacotar” a chama da função transporte, com seus dois argumentos, já que o apply só suporta um.
01 02 03 04 05 | import pandas as pd pedidos = pd.read_excel(URL) pedidos[ 'Transportadora' ] = pedidos. apply ( lambda x : transportadora(x.Total, x.Estado), axis = 1 ) |
Se eu der o display agora, vou ver a transportadora para cada pedido!
Projeto Original
Você pode conferir o projeto original no vídeo abaixo: