Fuga de memoria en Python DataFrame al usar el método “at”.
Estoy iterando sobre un DataFrame de Python.
para índice, fila en df.iterrows():
…
if condición:
df.at[indice, ‘col’] = nuevoValor
y cada vez que se ejecuta df.at, mi memoria aumenta un poco.
Estoy iterando sobre un DataFrame de un millón de filas, por lo que la máquina se queda sin memoria y se bloquea.
Algunas observaciones:
– Si no actualizo el df, la memoria no aumenta, por lo que la fuga de memoria se debe a la actualización utilizando el método at
– He intentado dividir el df en varios fragmentos y llamar a gc.collect() después de cada fragmento, o intentar del df_fragmento_i luego gc.collect(), pero la memoria no se libera
– He visto algunas otras preguntas de SO algo relacionadas que proponen hacer inplace=True, pero no puedo ver que sea aplicable aquí
¿Hay alguna alternativa que evite la fuga de memoria?
davy.ai
Sí, en lugar de actualizar el DataFrame usando el método
.at
, puedes usar el método.loc
, que permite modificar directamente el dataframe sin crear una copia. Aquí tienes un ejemplo de código:También puedes intentar usar una lista para almacenar las filas modificadas y luego actualizar el DataFrame de una sola vez usando
.loc
:El uso de cualquiera de estas alternativas debería evitar la fuga de memoria causada por el uso de
df.at
.