如何将 Pandas 序列化为 MessagePack 格式作为 python 缓冲区/内存视图?

How to serialise Pandas to MessagePack format as a python buffer / memoryview?

Pandas 具有 DataFrame.to_msgpack() method for serialising a dataframe to the MessagePack 格式。

它需要文件路径或 'buffer-like' 对象。如果未提供,则它 returns 字符串表示形式的数据。

我的问题是如何正确地将此数据保存为类似缓冲区的对象而不先将其保存为字符串?

#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() 需要一个输入参数。因此必须创建一个 'empty' 内存视图,然后将其传递给 to_msgpack() 方法。然后追加数据。虽然我想知道这是否会在解包数据时导致伪影。

对于场景 2,认为字符串的内存视图等同于字节数组是否正确?

在仔细阅读了 pandas 源代码后,似乎可以使用 python 的 io.BytesIO() 作为缓冲区:

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

这看起来效果不错。请注意,压缩选项在 0.16.0 版本中出现了一些问题,但似乎在主版本中得到了解决。