Постоянный кеш Python pandas

Есть ли реализация для python pandas, которая кэширует данные на диске, чтобы я мог избегать их воспроизведения каждый раз?

В частности есть ли метод кеширования для get_yahoo_data финансовых?

Очень плюсом будет:

  • очень мало строк кода для написания
  • возможность интеграции сохраненных рядов при загрузке новых данных из того же источника
8
0
10 222
3

Ответы 3

Есть много способов добиться этого, но, вероятно, самый простой способ - использовать встроенные методы для записи и чтения Соленые огурцы Python. Вы можете использовать pandas.DataFrame.to_pickle для сохранения DataFrame на диск и pandas.read_pickle для чтения сохраненного DataFrame с диска.

Пример для pandas.DataFrame:

# Store your DataFrame
df.to_pickle('cached_dataframe.pkl') # will be stored in current directory

# Read your DataFrame
df = pandas.read_pickle('cached_dataframe.pkl') # read from current directory

Те же методы работают и для pandas.Series:

# Store your Series
series.to_pickle('cached_series.pkl') # will be stored in current directory

# Read your DataFrame
series = pandas.read_pickle('cached_series.pkl') # read from current directory

В зависимости от различных требований, для этого есть дюжина методов, туда и обратно, в CSV, Excel, JSON, Python Pickle Format, HDF5 и даже SQL с DB и т. д.

Что касается строк кода, многие из этих форматов to/read представляют собой всего лишь одну строку кода для каждого направления. Python и Pandas уже делают код настолько чистым, насколько это возможно, так что вы можете меньше беспокоиться об этом.

Я думаю, что не существует единого решения, удовлетворяющего все требования, на самом деле в каждом конкретном случае:

  • для удобства чтения сохраненных данных: CSV, Excel
  • для двоичной сериализации объекта Python (сценарии использования): Pickle
  • для обмена данными: JSON
  • для длительного и постепенного обновления: SQL
  • и т.п.

И если вы хотите ежедневно обновлять цены на акции и для последующего использования, я предпочитаю Панды с SQL-запросами, конечно, это добавит несколько строк кода для настройки соединения с БД:

from sqlalchemy import create_engine

new_data = getting_daily_price()
# You can also choose other db drivers instead of `sqlalchemy`
engine = create_engine('sqlite:///:memory:')
with engine.connect() as conn:
    new_data.to_sql('table_name', conn) # To Write
    df = pd.read_sql_table('sql_query', conn) # To Read

Я использую python, чтобы не писать много кода, какое решение было бы лучшим и более дешевым с точки зрения строк кода?

Luca C. 10.07.2018 16:11

@LucaC. Я просто переписал ответ по вашему обновленному вопросу. Надеюсь, это может быть более полезным.

YaOzI 10.07.2018 18:46

Вот сравнение скоростей для нескольких методов сериализации. Я думаю, что JSON - лучший выбор здесь из-за удобочитаемости, скорости и безопасности. benfrederickson.com/dont-pickle-your-data

user4815162342 01.10.2020 17:26

Вы можете использовать пакет Кэш данных.

from data_cache import pandas_cache

@pandas_cache
def foo():
    ...

Другие вопросы по теме