Vectorizar una función en Pandas
La vectorización es una forma de convertir una función en una forma que la evalúe de manera más eficiente. Acelera el procesamiento de datos en Python al convertirlos en matrices. Acelera el código de Python sin usar un bucle.
La biblioteca Pandas es una herramienta popular en Python para el análisis y la manipulación de datos. Usamos Vectorización en Pandas comúnmente en computación numérica para mejorar el rendimiento del código.
Un marco de datos de Pandas es una estructura de datos construida sobre un marco de datos, que proporciona la funcionalidad de los marcos de datos R y los diccionarios de Python. Es como un diccionario de Python pero con todas las capacidades de análisis y manipulación de datos, como tablas de Excel y bases de datos con filas y columnas.
Vectorizar una función en Pandas
Instalemos la biblioteca de Python pandas
para importar marcos de datos.
PS C:\> pip install pandas
Para realizar la vectorización en un marco de datos, lo importamos usando la biblioteca de Python pandas
. Ejecutemos el siguiente código para importar un marco de datos y hacerlo grande a través de la concatenación.
Código de ejemplo (guardado en demo.py
):
import pandas as pd
small_df = pd.read_csv("Salaries.csv")
df = pd.concat([small_df] * 100, ignore_index=True)
Ahora ejecute el siguiente código para calcular el número total de filas del marco de datos para el análisis de datos.
Código de ejemplo (guardado en demo.py
):
print(f"No of rows: {len(df)}")
SALIDA (impresa en la consola):
No of rows: 14865400
Veamos el tiempo de consumo de una operación realizada en el marco de datos sin vectorización ejecutando el siguiente código.
Código de ejemplo (guardado en demo.py
):
import time
import numpy
start_time = time.process_time()
pay_with_tax = np.zeros(len(df))
for idx, pay in enumerate(df.TotalPay.values):
pay_with_tax[idx] = pay * 1.05 + 1
end_time = time.process_time()
print("Without using Vectorization")
print(f"pay_with_tax = {pay_with_tax}")
print(f"Computation time = {(1000*(end_time - start_time ))}ms")
La función np.zeros()
toma el tamaño como len(df)
y crea una matriz de ceros del tamaño especificado. El bucle for
itera sobre la matriz pay_with_tax
y la columna TotalPay
de los datos enmarcar como pago
.
Calcula el impuesto para cada pago
y lo almacena en pago_con_impuestos
.
SALIDA (impresa en la consola):
La vectorización agrega flexibilidad a las operaciones utilizando enfoques SIMD (instrucción única, datos múltiples). En Pandas, una API
por lotes acelera las operaciones sin usar bucles.
Ejecutemos el código dado a continuación que usa la vectorización para calcular el consumo de tiempo en el cálculo de salario_con_impuestos
.
Código de ejemplo (guardado en demo.py
):
start_time = time.process_time()
pay_with_tax = df.TotalPay.values * 1.05 + 1
end_time = time.process_time()
print("Using Vectorization")
print(f"pay_with_tax = {pay_with_tax}")
print(f"Computation time = {(1000*(end_time - start_time ))}ms")
SALIDA (impresa en la consola):
También puede aplicar operaciones estadísticas de la biblioteca numpy
, como mean
, sqrt
, etc., agregando pequeños cambios al código anterior.
Código de ejemplo (guardado en demo.py
):
import numpy as np
# non vectorized
for idx, pay in enumerate(df.TotalPay.values):
pay_with_tax[idx] = np.mean(pay)
# vectorized
pay_with_tax = df["TotalPay"].apply(np.mean)
Puede ver la diferencia en el consumo de tiempo, con o sin vectorización. Las industrias manejan de millones a billones de filas de big data.
Calcular estos datos con un enfoque no vectorizado lleva mucho tiempo. Por lo tanto, la naturaleza flexible de la vectorización en los marcos de datos de Pandas ayuda en el análisis y la manipulación de datos rápidos.
Artículo relacionado - Pandas DataFrame
- Cómo obtener las cabeceras de columna de Pandas DataFrame como una lista
- Cómo borrar la columna de Pandas DataFrame
- Cómo convertir la columna del DataFrame a Datetime en Pandas
- Cómo convertir un float en un entero en Pandas DataFrame
- Cómo clasificar Pandas DataFrame por los valores de una columna
- Cómo obtener el agregado de Pandas grupo por y suma