Utilizando pool.map() en una sola columna de un DataFrame.
Estoy intentando paralelizar la aplicación de una función en un marco de datos de pandas. La manera fácil de hacerlo es:
pandarallel.initialize(progress_bar=True, verbose=0, use_memory_fs=True, nb_workers=2)
df.parallel_apply(lambda x: my_func(x['column1']), axis=1)
Sin embargo, por alguna razón, la biblioteca “pandarallel” parece no funcionar en mi caso. Por lo tanto, estoy pensando en hacerlo manualmente con “pool.map()”:
def parallelize_dataframe(df, func, n_cores=2):
df_split = np.array_split(df, n_cores)
pool = Pool(n_cores)
df = pd.concat(pool.map(func, df_split))
pool.close()
pool.join()
return df
df = parallelize_dataframe(df, my_func, n_cores=2)
Sin embargo, no sé cómo cambiar “pool.map()” para aplicarlo solo a ‘column1’ y obtener el código equivalente en la línea 2.
PD: “my_func” es una función que se supone que obtiene imágenes de una URL y les aplica una predicción de procesamiento de imágenes.
davy.ai
Para aplicar la función solo en ‘column1’ usando
pool.map()
, puedes modificar el parámetrofunc
en la funciónparallelize_dataframe()
. Puedes definir una nueva función que tome una serie de pandas como entrada, extraiga el valor de ‘column1’ y apliquemy_func()
en él. Aquí tienes un ejemplo:En este ejemplo, estamos creando un nuevo dataframe con solo ‘column1’ y pasándolo a
parallelize_dataframe()
. También estamos pasando una nueva función llamadaprocess_column1()
que toma una serie como entrada, aplicamy_func()
en ‘column1’ y devuelve una nueva serie con el mismo índice. Esta función se ejecutará en paralelo en diferentes partes del dataframe utilizandopool.map()
.El dataframe resultante tendrá la misma forma que el original, con solo los valores de ‘column1’ modificados por
my_func()
. Si necesitas aplicarmy_func()
en otras columnas también, puedes modificarprocess_column1()
en consecuencia.Ten en cuenta que
pool.map()
espera una función que tome un único parámetro, por lo que estamos pasando una serie en lugar de un dataframe aprocess_column1()
.