Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — CESPE / CEBRASPE 2025

ProgramaçãoLinguagens de programação
Código
ce222024
Banca
CESPE / CEBRASPE
Órgão
UNB
Ano
2025
Nível
Médio
Cargo
Técnico em Tecnologia da Informação
Julgue o item a seguir, referente a Python.Na execução do código a seguir, a tentativa de criar a coluna status em df_aprovados não será bem-sucedida devido à ocorrência SettingWithCopyWarning, de df_aprovados é uma fatia do data frame original.Imagem associada para resolução da questão
  1. CCerto
  2. EErrado
Revelar gabarito e comentário

GabaritoC — Certo

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Python: SettingWithCopyWarning no pandas

Gabarito: letra C (CERTO). A tentativa de criar a coluna status em df_aprovados não será bem-sucedida porque df_aprovados é uma fatia (slice) do DataFrame original, e o pandas emite o SettingWithCopyWarning para alertar sobre essa operação ambígua. O aviso não impede a execução, mas sinaliza que a modificação pode não funcionar como esperado, pois a fatia pode ser uma cópia ou uma visão (view) do DataFrame original.

O SettingWithCopyWarning é um dos avisos mais comuns e confusos para quem está começando com pandas. Ele ocorre quando você tenta modificar um DataFrame que foi criado a partir de uma operação de filtragem ou seleção, como df[df['nota'] >= 7]. O pandas não consegue determinar com certeza se essa fatia é uma visão (view) — que aponta para os mesmos dados do DataFrame original — ou uma cópia (copy) — que possui dados independentes. Essa ambiguidade é o que gera o aviso.

Na prática, o que acontece é o seguinte: quando você faz df_aprovados = df[df['nota'] >= 7], o pandas pode criar uma cópia dos dados ou uma visão, dependendo de fatores internos de otimização. Se for uma visão, a modificação df_aprovados['status'] = 'aprovado' pode até funcionar, mas pode também não propagar a alteração para o DataFrame original, ou pior, pode gerar um SettingWithCopyWarning que indica que a operação pode não ter efeito. Se for uma cópia, a modificação será feita apenas na cópia, e o DataFrame original permanecerá inalterado.

A forma correta de evitar esse problema é usar o método .copy() ao criar a fatia, garantindo que você está trabalhando com um DataFrame independente:

df_aprovados = df[df['nota'] >= 7].copy()
df_aprovados['status'] = 'aprovado'

Ou, se a intenção é modificar o DataFrame original, deve-se usar .loc para fazer a atribuição diretamente:

df.loc[df['nota'] >= 7, 'status'] = 'aprovado'

A banca explora exatamente essa confusão: o candidato pode pensar que o aviso impede a execução, mas na verdade ele é apenas um alerta. A questão afirma que a tentativa "não será bem-sucedida", o que é verdadeiro no sentido de que a operação pode não ter o efeito desejado (modificar o DataFrame original), e o aviso é o sintoma desse problema.

NÃO CAIA NESSA!

A banca quer que você confunda o SettingWithCopyWarning com um erro que impede a execução. Na verdade, ele é um aviso (warning), não uma exceção. O código executa, mas a modificação pode não ser persistida no DataFrame original, pois a fatia pode ser uma cópia. O termo "não será bem-sucedida" refere-se a essa falha silenciosa, não a um crash do programa.

  1. 1Fatiar DataFrame
  2. 2Atribuir coluna na fatia
  3. 3Pandas emite aviso
  4. 4Alteração pode não persistir
LEVEL · soulevel.com.br

Item — ✅ CERTO

A afirmação está correta. O SettingWithCopyWarning é emitido exatamente quando se tenta modificar uma fatia de um DataFrame, como df_aprovados = df[df['nota'] >= 7], e depois se faz uma atribuição como df_aprovados['status'] = 'aprovado'. O aviso indica que a operação pode não funcionar como esperado, pois a fatia pode ser uma cópia, e a modificação não será refletida no DataFrame original. Portanto, a tentativa de criar a coluna status não será bem-sucedida no sentido de que a alteração pode não ser persistida, e o aviso é o alerta para esse comportamento.

Gabarito: letra C (CERTO).

Link permanente: /questoes/ce222024