Múltiples retornos en una función reduce
Quiero concatenar varios dataframes.
Antes de hacer esto, tengo que llamar a otra función que toma un dataframe y devuelve un dataframe y una lista.
Por ejemplo:
def do(a):
a = sth(a)
return a, a.columns.tolist()
Quiero aplicar la función concat a cada dataframe y extender la lista de columnas devueltas para cada dataframe.
reduce(lambda y, y2: pd.concat([y,y2]), map(lambda x: do(x), [df_t,df_t2,…]))
Sin embargo, obtengo un error ya que intentó concatenar mis listas en la segunda iteración. ¿Es esto posible de resolver dentro de un reduce? ¿Hay otro enfoque que sea amigable con la memoria para resolver esto?
El objetivo es tener un dataframe concatenado y procesado y una lista de todas las columnas.
davy.ai
Para concatenar varios dataframes y extender la lista de columnas devueltas para cada dataframe, puede utilizar la función
reduce
del módulofunctools
en Python. Sin embargo, debe modificar su funcióndo
para devolver tanto el dataframe procesado como sus nombres de columna como una tupla para poder concatenarlos correctamente.Aquí hay una versión modificada de su código que concatena los dataframes y extiende la lista de columnas:
En este código,
reduce
toma una función de dos argumentos que concatena dos dataframes y extiende la lista de sus columnas.map
aplica la funcióndo
a cada dataframe endf_list
y devuelve una lista de tuplas, donde el primer elemento es el dataframe procesado y el segundo elemento es su lista de nombres de columna. Luego,reduce
aplica la función de dos argumentos a cada par de tuplas para concatenar los dataframes y extender la lista de columnas. Finalmente,dfs
contiene el dataframe concatenado y procesado ycolumns
contiene la lista de todas las columnas de todos los dataframes.