Memoización de pandas

Tengo largos cálculos que repito muchas veces. Por lo tanto, me gustaría usar la memorización (paquetes como jug y joblib ), en concierto con Pandas . El problema es si el paquete memorizaría bien Pandas DataFrames como argumentos de método.

¿Alguien lo ha intentado? ¿Hay algún otro paquete / forma recomendada para hacer esto?

Autor de jarra aquí: jarra funciona bien. Acabo de probar lo siguiente y funciona:

from jug import TaskGenerator import pandas as pd import numpy as np @TaskGenerator def gendata(): return pd.DataFrame(np.arange(343440).reshape((10,-1))) @TaskGenerator def compute(x): return x.mean() y = compute(gendata()) 

No es tan eficiente como podría ser, ya que solo utiliza pickle internamente para el DataFrame (aunque lo comprime sobre la marcha, por lo que no es horrible en términos de uso de memoria, solo más lento de lo que podría ser).

Estaría abierto a un cambio que los guarde como un caso especial, como lo hace actualmente la jarra para una gran cantidad de arreglos: https://github.com/luispedro/jug/blob/master/jug/backends/file_store.py#L102

Yo uso este decorador de memoización básico, memoized . http://wiki.python.org/moin/PythonDecoratorLibrary#Memoize

Los DataFrames son hashable, por lo que debería funcionar bien. Aquí hay un ejemplo.

 In [2]: func = lambda df: df.apply(np.fft.fft) In [3]: memoized_func = memoized(func) In [4]: df = DataFrame(np.random.randn(1000, 1000)) In [5]: %timeit func(df) 10 loops, best of 3: 124 ms per loop In [9]: %timeit memoized_func(df) 1000000 loops, best of 3: 1.46 us per loop 

Me parece bien.