Я пытаюсь сохранить некоторую дополнительную информацию в DataFrames непосредственно в том же самом DataFrame, например, некоторые параметры, описывающие хранимые данные.
Я добавил эту информацию как дополнительные атрибуты в DataFrame:
df.data_origin = 'my_origin'
print(df.data_origin)
Но когда он сохраняется и загружается, эти дополнительные атрибуты теряются:
df.to_pickle('pickle_test.pkl')
df2 = pd.read_pickle('pickle_test.pkl')
print(len(df2))
print(df2.definition)
...
465387
>>> AttributeError: 'DataFrame' object has no attribute 'definition'
Обходной путь, который я нашел, состоит в том, чтобы сохранить данные в DataFrame и затем назначить их дляпустой DataFrame:
with open('modified_dataframe.pkl', "wb") as pkl_out:
pickle.dump(df.__dict__, pkl_out)
df2 = pd.DataFrame()
with open('modified_dataframe.pkl', "rb") as pkl_in:
df2.__dict__ = pickle.load(pkl_in)
print(len(df2))
print(df2.data_origin)
...
465387
my_origin
Вроде бы работает, но:
- Есть ли лучший способ сделать это?
- Я теряю информацию?(по-видимому, все данные есть)
- Здесь обсуждается другое решение, но я хотел бы знать, является ли подход сохранения подхода к классу действительным, чтобы сохранить его полностьюинформация.
РЕДАКТИРОВАТЬ: Хорошо, я нашел большой недостаток.Это прекрасно работает для сохранения отдельных DataFrames в изолированных файлах, но не будет работать, если у меня есть словари, списки или подобные с DataFrames в них.