federleicht - это пакет Python, предоставляющий декоратор кеша для pandas.DataFrame , используя легкий и эффективный формат файла перьев pyarrow .
federleicht.cache_dataframe предназначен для украшения функций, которые возвращают объекты pandas.DataFrame . Декоратор сохраняет DataFrame в файл перьев на первом вызове и автоматически загружает его на последующие вызовы, если файл существует.
pandas.DataFrame без усилий, используя формат перья, известный своей скоростью и простотой. Чтобы реализовать истечение срока действия кэша, federleicht требует, чтобы все аргументы декорированной функции были сериализуемыми. Кэш истекает в следующих условиях:
args / kwargs ) изменения украшенной функции.os.PathLike передается в качестве аргумента, кэш истекает, если изменится размер файла и / или время изменения.timedelta .os.PathLikepandas.DataFramepandas.Seriesnumpy.ndarraydatetime.datetimetypes.FunctionType Установите FederLeicht из PYPI:
pip install federleicht Обычно md5 используется для хэширования аргументов, но даже для более быстрого хэширования вы можете попробовать xxhash в качестве дополнительной зависимости:
pip install federleicht[xxhash]Вот быстрый пример:
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 () Функции, которые используются для оценки производительности декоратора 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 pandas.DataFrame без словаря attrs будет кэширован в каталоге .pandas_cache и истекает только в случае изменения файла. Для получения более подробной информации см. Раздел истечения срока действия кеша.
@ cache_dataframe
def read_cache ( file : pathlib . Path , ** kwargs ) -> pd . DataFrame :
return read_data ( file , ** kwargs )Результаты сильно зависят от конфигурации системы и файловой системы. Следующие результаты получены на:
| NROS | 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 |