Optimización del rendimiento de Pandas: consejos y trucos para trabajar con Big Data | de Ayşe Kübra Kuyucu | febrero, 2023
¡Se proporcionan ejemplos de código!
El rendimiento de Pandas puede convertirse en un problema cuando se trabaja con grandes bases de datos. En este blog, exploraremos consejos y trucos para optimizar el rendimiento de Pandas cuando se trabaja con grandes conjuntos de datos y mostraremos ejemplos de código para cada consejo.
¡Consejos cubiertos!
∘ Utilice operaciones vectorizadas en lugar de bucles
∘ Utilice el tipo de datos adecuado
∘ Usa Cython o Numba
∘ Usa el parámetro “dtype”
∘ Usar el parámetro “in situ”
∘ Usa la librería “modin”
∘ Usa la biblioteca “Dask”
Utilice operaciones vectorizadas en lugar de bucles
Las operaciones de Pandas están optimizadas para el rendimiento y las operaciones vectorizadas son más rápidas que recorrer los datos en bucle. Por ejemplo, considere el siguiente código:
import pandas as pddf = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [10, 20, 30, 40]})
# Using apply method
df['col1_plus_col2'] = df.apply(lambda row: row['col1'] + row['col2'], axis=1)
# Using vectorized operation
df['col1_plus_col2'] = df['col1'] + df['col2']
La operación vectorizada es más rápida que usar .apply
método.
Usa el tipo de datos correcto
Elegir el tipo de datos correcto puede mejorar en gran medida el rendimiento de las operaciones de Pandas. Por ejemplo, considere el siguiente código:
import pandas as pd
import numpy as np# Using float data type
df = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [10, 20, 30, 40]})
# Convert to int data type
df = df.astype({'col1': np.int32, 'col2': np.int32})
usando int
tipo de datos en su lugar float
puede mejorar el rendimiento.
Usa Cython o Numba
Cython y Numba son bibliotecas de Python que le permiten escribir código en Python que se ejecuta más rápido que el código de Python puro. Por ejemplo, considere el siguiente código usando Cython:
import pandas as pd
import numpy as np
from cython import cfunc, floatdf = pd.DataFrame({'col1': [1, 2, 3, 4], 'col2': [10, 20, 30, 40]})
# Define a Cython function
@cfunc
def cy_add(x, y):
return x + y
# Use Cython function
df['col1_plus_col2'] = df.apply(lambda row: cy_add(row['col1'], row['col2']), axis=1)
Usando Cython o Numba, puede acelerar enormemente sus operaciones de Pandas.
Utilice el parámetro “dtype”
Al especificar el tipo de datos de las columnas en un marco de datos de Pandas mediante el parámetro “dtype”, podemos asegurarnos de que Pandas utilice el tipo de datos óptimo para cada columna, lo que puede mejorar considerablemente el rendimiento.
Ejemplo:
import pandas as pd# Create a sample data frame
df = pd.DataFrame({
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3': [7, 8, 9]
})
# Specify the data type of the columns
df = df.astype({
'col1': 'int32',
'col2': 'int32',
'col3': 'int32'
})
use el parámetro “inplace”
El parámetro inplace nos permite modificar un dataframe de Pandas en su lugar sin crear uno nuevo. Al usar esta configuración, podemos reducir el uso de memoria y mejorar el rendimiento.
Ejemplo:
import pandas as pd# Create a sample data frame
df = pd.DataFrame({
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3': [7, 8, 9]
})
# Modify the data frame in place
df.drop('col3', axis=1, inplace=True)
Utilice la biblioteca “Modin”
La biblioteca Modin es una biblioteca para computación distribuida en Python que nos permite dividir un marco de datos de Pandas en varias máquinas, lo que puede mejorar en gran medida el rendimiento.
Ejemplo:
import pandas as pd
import modin.pandas as mpd# Create a sample data frame
df = pd.DataFrame({
'col1': [1, 2, 3],
'col2': [4, 5, 6],
'col3': [7, 8, 9]
})
# Convert the data frame to Modin
df = mpd.DataFrame(df)
Usar la biblioteca Dash
La biblioteca Dask es una biblioteca para computación paralela en Python. Al usar esta biblioteca, puede paralelizar sus operaciones de Pandas, lo que puede mejorar en gran medida el rendimiento. Aquí hay un código de muestra que usa dask para paralelizar una operación de pandas:
import dask.dataframe as dd# Load the data using dask dataframe
df = dd.read_csv("large_dataset.csv")
# Perform operation on dask dataframe
result = df.groupby('column_name').mean().compute()
En este ejemplo, primero cargamos un gran conjunto de datos en un marco de datos dask y luego realizamos una operación de grupo por grupo para calcular la media de los valores en cada grupo. Él compute()
El método ejecuta el cálculo y devuelve el resultado como un marco de datos de Pandas.
En conclusión, al utilizar estos consejos y trucos, puede mejorar en gran medida el rendimiento de sus operaciones de Pandas cuando trabaje con grandes bases de datos. Ya sea que esté trabajando con un gran marco de datos o procesando grandes cantidades de datos, estos consejos lo ayudarán a optimizar su código de Pandas y hacerlo más eficiente.