Pular para o conteúdo principal

Questão de Programação — Linguagens de programação — FGV 2025

ProgramaçãoLinguagens de programação
Código
fg107889
Banca
FGV
Órgão
CPRM
Ano
2025
Nível
Superior
Cargo
Analista em Geociências - Geoprocessamento
Um cientista de dados trabalha com um DataFrame de milhões de registros e deseja aplicar uma função complexa em uma coluna de maneira eficiente, evitando gargalos de performance.A prática mais recomendada nesse caso é
  1. Ausar df["coluna"].apply(lambda x: func(x)) para aplicar a função linha a linha.
  2. Biterar com for index, row in df.iterrows() e aplicar a função por linha.
  3. Cutilizar df["coluna"].map(func) se a função for vetorizável.
  4. Dtransformar o DataFrame em lista de dicionários e aplicar map() do Python nativo.
  5. Esalvar como CSV, processar externamente e reimportar com read_csv().
Revelar gabarito e comentário

GabaritoC — utilizar df["coluna"].map(func) se a função for vetorizável.

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”.

Otimização de desempenho em DataFrames pandas

Gabarito: letra C. Para aplicar uma função complexa a uma coluna de milhões de registros com eficiência, o ideal é usar df["coluna"].map(func) quando a função for vetorizável. Isso explora o processamento vetorizado do pandas/numpy, que opera em nível C, sem loops Python lentos. As demais alternativas envolvem iteração linha a linha (apply, iterrows), conversão para listas ou I/O externo, todos ineficientes para grandes volumes.

A banca testa o conhecimento de boas práticas de performance em pandas. O ponto central é que operações vetorizadas (com map ou funções numpy) são muito mais rápidas que loops Python. As alternativas A, B, D e E incorrem em gargalos.

  1. 1Operação vetorizada
  2. 2map() com função vetorizável
  3. 3Código C otimizado (numpy)
  4. 4Melhor desempenho
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

Usar df["coluna"].apply(lambda x: func(x)) ainda é um loop por linha em Python, mesmo que encapsulado. apply é mais lento que map vetorizado e não é recomendado para funções que podem ser vetorizadas.

Alternativa B — ❌ Incorreta

df.iterrows() retorna cada linha como uma série Python. Percorrer um DataFrame de milhões de registros com for é extremamente ineficiente, o pior gargalo possível.

Alternativa C — ✅ Correta ⟵ GABARITO

df["coluna"].map(func) aplica a função elemento a elemento, mas se a função for vetorizável (operar em arrays numpy internamente), o pandas delega a execução para código C otimizado. É a prática mais eficiente entre as opções.

Alternativa D — ❌ Incorreta

Converter para lista de dicionários e usar map() do Python nativo envolve sobrecarga de conversão e iteração em Python puro, além do map nativo não ser vetorizado.

Alternativa E — ❌ Incorreta

Salvar em CSV, processar externamente e reimportar é caríssimo em I/O e serialização, inviável para milhões de registros.

PEGA ESSA DICA!

Em pandas, priorize sempre operações vetorizadas (map, apply com funções numpy, expressões vetoriais) sobre loops explícitos. Use apply apenas quando a função não puder ser vetorizada e o DataFrame não for muito grande.

Gabarito: letra C.

Link permanente: /questoes/fg107889