Как сериализовать Pandas в формат MessagePack в виде буфера Python / просмотра памяти?

В Pandas есть метод DataFrame.to_msgpack() для сериализации кадра данных в формат MessagePack.

Требуется путь к файлу или объект типа буфера. Если не предоставлено, то возвращает данные в строковом представлении.

Мой вопрос: как правильно сохранить эти данные в виде буфера, не сохраняя их в виде строки в первую очередь?

#1
string_data = df.to_msgpack()  # returns data as string

#2
memory_buffer = memory view(df.to_msgpack())  # creates a memory view from string

#3
df.to_msgpack('filename.msg')  # return data as binary file

#4
memory_buffer = memoryview(b'')
df.to_msgpack(memory_buffer, append=True)  # would this work?

В сценарии 4 для df.to_msgpack() требуется буфероподобный объект, тогда как memoryview() требует входной параметр. Таким образом, нужно создать "пустое" представление памяти и передать его методу to_msgpack (). Затем добавьте данные. Хотя мне интересно, не приведет ли это к артефактам при распаковке данных.

Сценарий 2, правильно ли думать, что представление памяти строки будет эквивалентно байтовому массиву?

1 ответ

Решение

После просмотра исходного кода pandas кажется, что способ сделать это - использовать io.BytesIO() из python для буфера:

buffer = io.BytesIO()
df.to_msgpack(buffer, append=False, compress='zlib')

Похоже, это работает хорошо. Обратите внимание, что опция сжатия в версии 0.16.0 выглядит немного неуверенно, но, похоже, в мастере разрешена.

Другие вопросы по тегам