"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Por qué np.vectorize() es más rápido que df.apply() para la creación de columnas de Pandas?

¿Por qué np.vectorize() es más rápido que df.apply() para la creación de columnas de Pandas?

Publicado el 2024-11-08
Navegar:270

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

Comparación de rendimiento de Pandas apply vs np.vectorize

Se ha observado que np.vectorize() puede ser significativamente más rápido que df. apply() al crear una nueva columna basada en columnas existentes en un Pandas DataFrame. La diferencia de rendimiento observada surge de los mecanismos subyacentes empleados por estos dos métodos.

df.apply() vs Python-Level Loops

df.apply() esencialmente crea un bucle a nivel de Python que itera sobre cada fila del DataFrame. Como se demuestra en los puntos de referencia proporcionados, los bucles a nivel de Python, como la comprensión de listas y el mapa, son relativamente lentos en comparación con los cálculos vectorizados reales.

np.vectorize() vs df.apply()

np.vectorize() convierte una función definida por el usuario en una función universal (ufunc). Ufuncs está altamente optimizado y puede realizar operaciones de elementos en matrices NumPy, aprovechando código basado en C y algoritmos optimizados. Esto contrasta con df.apply(), que opera en objetos de la serie Pandas e genera una sobrecarga adicional.

Vectorización verdadera: rendimiento óptimo

Para una creación de columnas verdaderamente eficiente , se recomiendan encarecidamente los cálculos vectorizados dentro de NumPy. Operaciones como numpy.where y la división directa por elementos con df["A"] / df["B"] son ​​extremadamente rápidas y evitan los gastos generales asociados con los bucles.

Optimización de Numba

Para una eficiencia aún mayor, es posible optimizar aún más los bucles utilizando Numba, un compilador que traduce funciones de Python en código C optimizado. Numba puede reducir el tiempo de ejecución a microsegundos, superando significativamente tanto a df.apply() como a np.vectorize().

Conclusión

Si bien np.vectorize() puede ofrecer Alguna mejora con respecto a df.apply(), no es un verdadero sustituto de los cálculos vectorizados en NumPy. Para lograr el máximo rendimiento, utilice la optimización de Numba u operaciones vectorizadas directas dentro de NumPy para la creación de nuevas columnas en Pandas DataFrames.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3