Как сериализовать 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 выглядит немного неуверенно, но, похоже, в мастере разрешена.