federleicht est un package Python fournissant un décorateur de cache pour pandas.DataFrame , en utilisant le format de fichier de plumes pyarrow léger et efficace.
federleicht.cache_dataframe est conçu pour décorer des fonctions qui renvoient les objets pandas.DataFrame . Le décorateur enregistre le DataFrame à un fichier de plumes lors du premier appel et le charge automatiquement sur les appels ultérieurs si le fichier existe.
pandas.DataFrame sans effort en utilisant le format de plumes, connu pour sa vitesse et sa simplicité. Pour implémenter l'expiration du cache, federleicht exige que tous les arguments de la fonction décorée soient sérialisables. Le cache expirera dans les conditions suivantes:
args / kwargs ) de la fonction décorée changent.os.PathLike est passé comme argument, le cache expirera si la taille du fichier et / ou le temps de modification change.timedelta donné.os.PathLikepandas.DataFramepandas.Seriesnumpy.ndarraydatetime.datetimetypes.FunctionType Installez Federleicht depuis PYPI:
pip install federleicht Normalement, md5 est utilisé pour hacher les arguments, mais pour un hachage encore plus rapide, vous pouvez essayer xxhash comme dépendance facultative:
pip install federleicht[xxhash]Voici un exemple rapide:
import pandas as pd
from federleicht import cache_dataframe
@ cache_dataframe
def generate_large_dataframe ():
# Simulate a heavy computation
return pd . DataFrame ({ "col1" : range ( 10000 ), "col2" : range ( 10000 )})
df = generate_large_dataframe () Fonctions utilisées pour comparer les performances du décorateur cache_dataframe .
def read_data ( file : str , ** kwargs ) -> pd . DataFrame :
"""
Read the earthquake dataset from a CSV file to Benchmark cache.
Perform some data type conversions and return the DataFrame.
"""
df = pd . read_csv (
file ,
header = 0 ,
dtype = {
"status" : "category" ,
"tsunami" : "boolean" ,
"data_type" : "category" ,
"state" : "category" ,
},
** kwargs ,
)
df [ "time" ] = pd . to_datetime ( df [ "time" ], unit = "ms" )
df [ "date" ] = pd . to_datetime ( df [ "date" ], format = "mixed" )
return df Le pandas.DataFrame sans le dictionnaire attrs sera mis en cache dans le répertoire .pandas_cache et ne fera expirer que si le fichier change. Pour plus de détails, consultez la section d'expiration du cache.
@ cache_dataframe
def read_cache ( file : pathlib . Path , ** kwargs ) -> pd . DataFrame :
return read_data ( file , ** kwargs )Les résultats dépendent fortement de la configuration du système et du système de fichiers. Les résultats suivants sont obtenus sur:
| nrows | read_data [s] | build_cache [s] | read_cache [s] |
|---|---|---|---|
| 10000 | 0,060 | 0,076 | 0,037 |
| 32170 | 0,172 | 0.193 | 0,033 |
| 103493 | 0,536 | 0,569 | 0,067 |
| 332943 | 1.658 | 1.791 | 0,143 |
| 1071093 | 5.383 | 5.465 | 0,366 |
| 3445752 | 16.750 | 17.720 | 1.141 |