federleicht é um pacote Python que fornece um decorador de cache para pandas.DataFrame , utilizando o formato de arquivo leve e eficiente de penas de pyarrow .
federleicht.cache_dataframe foi projetado para decorar funções que retornam objetos pandas.DataFrame . O decorador salva o quadro de dados em um arquivo de penas na primeira chamada e o carrega automaticamente nas chamadas subsequentes se o arquivo existir.
pandas.DataFrame sem esforço usando o formato de pena, conhecido por sua velocidade e simplicidade. Para implementar a expiração do cache, federleicht exige que todos os argumentos da função decorada sejam serializáveis. O cache expirará nas seguintes condições:
args / kwargs ) da função decorada mudarem.os.PathLike é passado como um argumento, o cache expirará se o tamanho do arquivo e / ou o tempo de modificação mudarem.timedelta .os.PathLikepandas.DataFramepandas.Seriesnumpy.ndarraydatetime.datetimetypes.FunctionType Instale Federleicht da Pypi:
pip install federleicht Normalmente, md5 é usado para hash os argumentos, mas para hash ainda mais rápido, você pode tentar xxhash como uma dependência opcional:
pip install federleicht[xxhash]Aqui está um exemplo rápido:
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 () Funções usadas para comparar o desempenho do decorador 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 O pandas.DataFrame sem o dicionário attrs será armazenado em cache no diretório .pandas_cache e só expirará se o arquivo for alterado. Para mais detalhes, consulte a seção de expiração do cache.
@ cache_dataframe
def read_cache ( file : pathlib . Path , ** kwargs ) -> pd . DataFrame :
return read_data ( file , ** kwargs )Os resultados dependem fortemente da configuração do sistema e do sistema de arquivos. Os seguintes resultados são obtidos em:
| 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 |