Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Dúvida .apply e argumento do lambda

Olá. Estou com dificuldades para entender as alternativas corretas.

A: alunos['Notas-Média(Notas)'] = alunos['Notas'] .apply(lambda x: x - alunos['Notas'].mean())

Dúvidas (mesmas para o exemplo B):

  • .apply() não precisa vir acompanhado anteriormente por nada?
  • como a função sabe quem é x? Não consegui entender como ele foi definido.
  • Os símbolos de divisão podem ser tanto '/' como '' ? O que seria esse símbolo \ ?

B: alunos['Notas-Média(Notas)'] = alunos.Notas - alunos.Notas.mean()

Dúvidas: O que seria esse símbolo \ nesse caso?

5 respostas

Ainda estou com dúvida, alguém poderia me ajudar, por gentileza? :)

Olá, Vivian Tudo bem?

Vamos lá!! :)

Dúvida 1

A função .apply() é usada para aplicar uma função lambda em cada valor da coluna 'Notas' e ela não precisa vir acompanhado anteriormente por nada

Dúvida 2

A função apply() do pandas é uma função de ordem superior, o que significa que ela recebe uma outra função (neste caso uma função lambda) como parâmetro e a aplica a cada elemento de uma coluna ou linha de um DataFrame.

Na expressão lambda lambda x: x - alunos['Notas'].mean(), o parâmetro x representa cada um dos valores da coluna 'Notas' do DataFrame 'alunos'que está sendo percorrido pela função apply().

Assim, a função apply() passa automaticamente o valor atual de cada elemento da coluna 'Notas' como argumento para a função lambda, e a partir daí a expressão x - alunos['Notas'].mean() é avaliada para cada um dos elementos, subtraindo a média da coluna 'Notas' de cada um deles.

Dessa forma, a função apply() não precisa explicitamente "saber quem é x", uma vez que o parâmetro é definido implicitamente no momento da chamada da função lambda.

Dúvida 3

O símbolo \ é utilizado em Python como um caractere de escape para indicar que uma linha de código continua na linha seguinte. Isso é útil quando se tem uma linha de código muito longa e não queremos quebrar a legibilidade do código colocando tudo em uma única linha. Com o caractere , é possível dividir a linha de código em duas ou mais linhas, sem que isso afete o seu funcionamento.

Espero que tenha ajudado! se ainda estiver com alguma dúvida é só chamar :D

Olá, Valquíria!

Me surgiu algumas outras dúvidas:

  • Para usar a função lambda, ela sempre tem que vir dentro de um .apply()?
  • Quando usamos a função lambda?
  • Se precisarmos pegar valores de duas colunas usamos x, y para lambda? Como seria?
  • Quais outras funções podemos usar dentro de .apply()?

Agradeço desde já pela explicação acima, já foi bastante esclarecedora!

solução!

Opa, Vivian! Vamos lá!

Quando usamos a função lambda?

Em Python, uma função lambda é uma função anônima que pode ser definida em uma única linha de código. A sintaxe básica de uma função lambda é a seguinte:

lambda argumentos: expressão

Por exemplo, a função lambda abaixo recebe um argumento x e retorna o valor x + 1:

lambda x: x + 1

Para usar a função lambda, ela sempre tem que vir dentro de um .apply()?

Existem diversas situações em que o uso de funções lambda pode ser vantajoso, como quando precisamos definir rapidamente uma função simples que não será reutilizada em outro lugar do código. Então, a função lambda não precisa necessariamente ser usada com o método apply() em Python. A função lambda é uma forma concisa de criar uma função anônima e pode ser usada em diversos contextos, como em list comprehension (listas de compreensão), funções filter(), map(), reduce(), entre outras.

Vou te mostrar a função lambda em outro contexto:

Aqui nós temos uma lista com alguns números, mas queremos obter apenas os valores pares dessa lista. Uma forma de obter uma lista apenas dos valores pares é usar uma função lambda:

numeros = [1, 2, 3, 4, 5, 6]
pares = list(filter(lambda x: x % 2 == 0, numeros))
print(pares)  

Vamos analisar com calma a expressão list(filter(lambda x: x % 2 == 0, numeros)) passo a passo:

  1. lambda x: x % 2 == 0 é uma função lambda que verifica se um número x é par (ou seja, se o resto da divisão de x por 2 é zero).

  2. filter() é uma função embutida do Python que recebe como argumentos uma função e um iterável, e retorna um iterador contendo apenas os elementos do iterável para os quais a função retorna True.

  3. numeros é uma lista de números.

  4. Então, a expressão filter(lambda x: x % 2 == 0, numeros) cria um iterador que contém apenas os elementos de numeros que são pares.

  5. Por fim, a função list() é usada para converter esse iterador em uma lista contendo os elementos filtrados.

Portanto, a expressão list(filter(lambda x: x % 2 == 0, numeros)) retorna uma lista contendo apenas os elementos de numeros que são pares. Nesse caso, a lista resultante é [2, 4, 6].

Se precisarmos pegar valores de duas colunas usamos x, y para lambda? Como seria?

Vamos pensar o seguinte, você tem o seguinte DataFrame:

indexcoluna1coluna2
014
125

Mas você quer criar uma nova coluna nesse DataFrame somando os valores das colunas 1 e 2, utilizando a função lambda... E aí como fazer isso? Podemos utilizar a função lambda lambda row: row['coluna1'] + row['coluna2'] recebe um argumento row, que é uma linha do DataFrame, e retorna a soma dos valores das colunas "coluna1" e "coluna2" daquela linha. O parâmetro axis=1 é necessário para que a função apply() seja aplicada a cada linha do DataFrame.

df['soma'] = df.apply(lambda row: row['coluna1'] + row['coluna2'], axis=1)

Como resultado teremos o seguinte DataFrame:

indexcoluna1coluna2soma
0145
1257
2369

Quais outras funções podemos usar dentro de .apply()?

Podemos usar a função apply() em diversas situações. Algumas funções comuns que podem ser usadas dentro de .apply() incluem:

  • Funções lambda: para executar operações simples ou operações que dependem dos valores de uma ou mais colunas.
  • Funções definidas pelo usuário: para executar operações mais complexas que não podem ser facilmente expressas em uma única linha de código.
  • Funções de agregação do pandas: para calcular estatísticas descritivas, como média, mediana, mínimo, máximo, etc., em um grupo de dados.
  • Funções de mapeamento do pandas: para mapear valores de uma coluna em um conjunto de valores diferentes, por exemplo, para codificar categorias como valores numéricos.
  • Funções integradas do Python: para executar operações matemáticas, operações de string, operações de tempo, etc.

Espero que isso te ajude, Vivian! Se tiver mais alguma dúvida estou aqui

Bons estudos! :D

Muito obrigada pela explicação! Agora ficou mais claro!