TL; DR: Вопрос в названии.См. Фрагмент кода.
Мне нужно хранить pandas.DataFrame
объекты в словарной структуре и сохранять их на диск.В моей текущей реализации я использую не вложенный Python dict
в форме Dict[str, pandas.DataFrame]
и каждую минуту сохраняю все pandas.DataFrame
на диск в виде csv-файла.Однако эти две обязанности (хранение данных в памяти и на диске) могут быть элегантно объединены с использованием таких структур данных, как HDF5.
Одним из важных ограничений является то, что я не могу изменить тип того, что хранится в pandas.DataFrame
, и, очевидно, не все типы объектов могут быть сохранены в HDF5.Причина в том, что я реализую сторонний интерфейс с предопределенными типами данных, которые необходимо обрабатывать в их исходной форме.Отображение экземпляров на разные объекты (например, экземпляр на dict
) потребует написания дополнительного уровня логики для сопоставления различных типов объектов туда и обратно (dict
на экземпляр), что плохо.
Aаналогичный вопрос с ответом здесь .Тем не менее, я не обязательно интересуюсь запросом сохраненных экземпляров впоследствии.Кроме того, я бы в идеале сохранил количество дополнительной логики для сериализации экземпляра на минимальном уровне (при необходимости вообще).Сжатие данных также не является проблемой.В качестве альтернативы потенциальный ответ может также указывать на хорошо установленный пакет Python, который уже инкапсулировал логику для хранения экземпляров классов в HDF5 или аналогичной модели данных.
import pandas as pd
class C:
def __init__(self, a=0):
self.a = a
def return_42(self):
return self.a
df = pd.DataFrame([C()])
df.dtypes
# 0 object
# dtype: object
store = pd.HDFStore('store1.hdf5')
store.append('c', pd.DataFrame([C()]))
# TypeError: Cannot serialize the column [0] because
# its data contents are [mixed] object dtype.