如何将Pandas序列化为MessagePack格式为python buffer / memoryview?

时间:2015-04-28 18:00:59

标签: python python-3.x pandas msgpack memoryview

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 个答案:

答案 0 :(得分:2)

在仔细阅读pandas源代码后,看来这样做的方法是使用python的io.BytesIO()作为缓冲区:

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

这似乎很好用。请注意,压缩选项在版本0.16.0中显得有点不稳定,但似乎在主服务器中已解决。