Pickle — сериализация объектов Python / pd 9

Модуль pickle предоставляет мощный алгоритм сериализации и десериализации структур данных Python. Pickling — это процесс, при котором иерархия объекта конвертируется в поток байтов.

Это позволяет переносить и хранить объект, так что получатель может восстановить его, сохранив все оригинальные черты.

В Python за этот процесс отвечает модуль pickle, но имеется и cPickle, который является результатом работы по оптимизации первого (написан на C). Он в некоторых случаях может быть быстрее оригинального pickle в тысячу раз. Однако интерфейс самих модулей почти не отличается.

Прежде чем переходить к функциям библиотеки, рассмотрим cPickle в подробностях .

Сериализация объекта с помощью cPickle

Формат данных, используемый pickle (или cPickle), универсален для Python. По умолчанию для превращения в человекочитаемый вид используется представление в виде ASCII. Затем, открыв файл в текстовом редакторе, можно понять его содержимое. Для использования модуля его сначала нужно импортировать:

>>> import pickle

Создадим объект с внутренней структурой, например, dict.

>>> data = { 'color': ['white','red'], 'value': [5, 7]}

Теперь выполним сериализацию с помощью функции dumps() модуля cPickle.

>>> pickled_data = pickle.dumps(data)

Чтобы увидеть, как прошла сериализация, необходимо изучить содержимое переменной pickled_data.

>>> print(pickled_data)

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

А после передачи их можно пересобрать (выполнить десериализацию) с помощью функции loads() из модуля cPickle.

>>> nframe = pickle.loads(pickled_data)
>>> nframe
{'color': ['white', 'red'], 'value': [5, 7]}

Процесс “pickling” в pandas

Когда дело доходит до сериализации (или десериализации), то pandas с легкостью справляется с задачей. Не нужно даже импортировать модуль cPickle, а все операции выполняются неявно.

Также формат сериализации в pandas не целиком в ASCII.

>>> frame = pd.DataFrame(np.arange(16).reshape(4,4), 
		         index=['up','down','left','right'])
>>> frame.to_pickle('frame.pkl')

Теперь у вас есть файл frame.pkl, содержащий всю информацию об объекте Dataframe.

Для его открытия используется следующая команда:

>>> pd.read_pickle('frame.pkl')
0123
up0123
down4567
left891011
right12131415

На этом примере видно, что все нюансы скрыты от пользователя pandas, что делает работу простой и понятной, особенно для тех, кто занимается непосредственно анализом данных.

Примечание. При использовании формата важно убедиться, что открываемый файл безопасен. Формат не очень защищен от вредоносных данных.

Максим
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ.
Мои контакты: Почта
admin@pythonru.comAlex Zabrodin2018-10-26OnlinePython, Programming, HTML, CSS, JavaScript