"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Por que np.vectorize() é mais rápido que df.apply() para criação de colunas Pandas?

Por que np.vectorize() é mais rápido que df.apply() para criação de colunas Pandas?

Publicado em 2024-11-08
Navegar:705

  Why is np.vectorize() Faster than df.apply() for Pandas Column Creation?

Comparação de desempenho de Pandas apply vs np.vectorize

Foi observado que np.vectorize() pode ser significativamente mais rápido que df. apply() ao criar uma nova coluna com base em colunas existentes em um DataFrame do Pandas. A diferença de desempenho observada decorre dos mecanismos subjacentes empregados por esses dois métodos.

df.apply() vs Python-Level Loops

df.apply() essencialmente cria um loop no nível Python que itera em cada linha do DataFrame. Conforme demonstrado nos benchmarks fornecidos, os loops no nível Python, como compreensão de lista e mapa, são relativamente lentos em comparação com cálculos vetorizados verdadeiros.

np.vectorize() vs df.apply()

np.vectorize() converte uma função definida pelo usuário em uma função universal (ufunc). Ufuncs são altamente otimizados e podem realizar operações elemento a elemento em arrays NumPy, aproveitando código baseado em C e algoritmos otimizados. Isso contrasta com df.apply(), que opera em objetos da série Pandas e incorre em sobrecarga adicional.

Verdadeira vetorização: desempenho ideal

Para criação de colunas verdadeiramente eficiente , cálculos vetorizados dentro do NumPy são altamente recomendados. Operações como numpy.where e divisão direta por elemento com df["A"] / df["B"] são extremamente rápidas e evitam as despesas gerais associadas aos loops.

Numba Optimization

Para uma eficiência ainda maior, é possível otimizar ainda mais os loops usando Numba, um compilador que traduz funções Python em código C otimizado. Numba pode reduzir o tempo de execução para microssegundos, superando significativamente df.apply() e np.vectorize().

Conclusão

Enquanto np.vectorize() pode oferecer alguma melhoria em relação a df.apply(), não é um verdadeiro substituto para cálculos vetorizados em NumPy. Para obter desempenho máximo, utilize a otimização Numba ou operações vetorizadas diretas dentro do NumPy para a criação de novas colunas em Pandas DataFrames.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3