Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Criando colunas

Olá! Tudo bem?

Segue abaixo, a resolução dos exercícios:

  1. df['Pontos_extras'] = df['Notas'].apply(lambda x: x*0.4)
    df

  2. df['Pontos_extras'] = df['Notas'].apply(lambda x: x*0.4)
    df

  3. df['Aprovação final'] = df['Notas finais'].apply(lambda x: True if x >=6 else False)
    df

  4. df.query('Aprovação final' == False & 'Aprovação final' == True')
    
1 resposta

Olá, Nicole. Tudo bem?

Parabéns por enfrentar o desafio prático do Pandas! Criar colunas e aplicar lógicas condicionais são tarefas fundamentais no dia a dia de um cientista ou analista de dados. O uso do método .apply() com funções lambda mostra que você já está captando conceitos bem legais de manipulação de dados.

Analisando o seu código, notei que os três primeiros blocos estão ótimos, mas a linha final do df.query() apresenta alguns pequenos detalhes de sintaxe e lógica que vão fazer o Python retornar um erro.

Para te ajudar a consolidar essa etapa e deixar o seu código rodando perfeitamente, preparei algumas correções e dicas importantes:


1. Corrigindo a Sintaxe do .query()

O método .query() do Pandas serve para filtrar linhas usando uma expressão de texto (String). Existem três pontos de atenção no seu comando atual:

  • Uso das aspas: A expressão inteira deve ficar dentro de aspas. Se o nome da sua coluna tem espaços (como 'Aprovação final'), o Pandas exige que você a envolva com crases (`) dentro da string.
  • Lógica impossível: O operador & significa "E". Da forma como está escrito, você está pedindo para o Pandas encontrar linhas onde o aluno esteja aprovado e reprovado ao mesmo tempo (True & False), o que resultará em uma tabela vazia.
  • Aspas sobrando: Havia uma aspa simples perdida no final da linha (True').

Se o seu objetivo era filtrar apenas os alunos aprovados, a sintaxe correta é:

df.query("`Aprovação final` == True")

Se a ideia era filtrar quem foi reprovado:

df.query("`Aprovação final` == False")

Dica de Ouro: Para evitar ter que usar crases no .query(), uma boa prática de Engenharia de Dados é nomear as colunas sem espaços e sem acentos, usando o padrão snake_case (ex: df['aprovacao_final']).


2. Forma Mais Rápida (Pythônica) de Criar a Coluna de Aprovação

No seu terceiro exercício, você usou:
df['Aprovação final'] = df['Notas finais'].apply(lambda x: True if x >=6 else False)

O código funciona, mas no Pandas nós podemos fazer isso de forma direta e muito mais rápida sem precisar do .apply() ou do lambda. Como o Pandas trabalha com operações vetorizadas, você pode fazer uma comparação direta na coluna inteira, e ele já devolverá True ou False automaticamente:

# Faz exatamente a mesma coisa, de forma mais simples e performática
df['Aprovação final'] = df['Notas finais'] >= 6

3. Ajuste no Cálculo dos Pontos Extras

No primeiro exercício, você calculou os pontos extras multiplicando a nota por 0.4.
Fique atenta apenas se a regra de negócio do desafio pedia para calcular 40% da nota atual ou se pedia para somar um bônus fixo de 0.4 pontos.

Se o objetivo era dar 0.4 pontos a mais para todo mundo diretamente, a operação vetorizada pura também resolve sem lambda:

# Soma 0.4 pontos diretamente em cada linha da coluna
df['Pontos_extras'] = df['Notas'] + 0.4

Excelente iniciativa em compartilhar sua resolução no fórum. Ajuste a linha do .query() no seu notebook e continue praticando com o Pandas!

Espero que possa ter lhe ajudado!