Questão de Programação — Linguagens de programação — FGV 2025
Programação›Linguagens 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 é
Ausar df["coluna"].apply(lambda x: func(x)) para aplicar a função linha a linha.
Biterar com for index, row in df.iterrows() e aplicar a função por linha.
Cutilizar df["coluna"].map(func) se a função for vetorizável.
Dtransformar o DataFrame em lista de dicionários e aplicar map() do Python nativo.
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.
1Operação vetorizada
2map() com função vetorizável
3Código C otimizado (numpy)
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.