Сохранение DataFrame с дополнительной информацией - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сохранить некоторую дополнительную информацию в 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 в них.

1 Ответ

0 голосов
/ 19 октября 2018

Я полагаю, что вы можете добиться своей цели, создав новый дочерний класс для pandas.DataFrame, заставив новый класс наследовать вещи от класса pandas.DataFrame, и добавив туда нужные атрибуты.Это может показаться немного пугающим, но вы можете спокойно поиграть с ним, когда используете его в разных местах.Другие вещи могут быть полезны для особых случаев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...