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