2015-04-28 2 views
0

Pandas имеет метод DataFrame.to_msgpack() для сериализации кадра данных в формате MessagePack.Как сериализовать формат Pandas в MessagePack как буфер python/memoryview?

Для этого требуется путь к файлу или «буферный» объект. Если этого не предусмотрено, то он возвращает данные в строчном представлении.

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

#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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^