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

179

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

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

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

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

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

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

>>> import pickle

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

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

Теперь выполним сериализацию с помощью функции 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, что делает работу простой и понятной, особенно для тех, кто занимается непосредственно анализом данных.

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

Тест на знание python

Что выведет этот код?
Какая функция удаляет объект из списка?
Что вернет следующий код?
Что нужно вcтавить после "if", для вывода "x четное число"
Какой будет результат выполнения этого кода?
Александр
Я создал этот блог в 2018 году, чтобы распространять полезные учебные материалы, документации и уроки на русском. На сайте опубликовано множество статей по основам python и библиотекам, уроков для начинающих и примеров написания программ. Пишу на популярные темы: веб-разработка, работа с базами данных, data sciense и другие...