Pandas msgpack vs 泡菜

Posted

技术标签:

【中文标题】Pandas msgpack vs 泡菜【英文标题】:Pandas msgpack vs pickle 【发布时间】:2015-08-19 12:43:20 【问题描述】:

Pandas 中的msgpack 应该是pickle 的替代品。

根据Pandas docs on msgpack:

这是一种轻量级的可移植二进制格式,类似于二进制 JSON, 这是高度节省空间的,并提供良好的性能 写入(序列化)和读取(反序列化)。

但是,我发现它的性能似乎无法与泡菜相提并论。

df = pd.DataFrame(np.random.randn(10000, 100))

>>> %timeit df.to_pickle('test.p')
10 loops, best of 3: 22.4 ms per loop

>>> %timeit df.to_msgpack('test.msg')
10 loops, best of 3: 36.4 ms per loop

>>> %timeit pd.read_pickle('test.p')
100 loops, best of 3: 10.5 ms per loop

>>> %timeit pd.read_msgpack('test.msg')
10 loops, best of 3: 24.6 ms per loop

问题:除了 pickle 的潜在安全问题之外,msgpack 与 pickle 相比有哪些优势? pickle 仍然是序列化数据的首选方法,还是目前存在更好的替代方法?

【问题讨论】:

查看这项非常全面的研究:matthewrocklin.com/blog/work/2015/03/16/Fast-Serialization。当您拥有大量数据时,msgpack 非常棒。 【参考方案1】:

泡菜更适合以下用途:

    数值数据或任何使用缓冲协议(numpy 数组)的数据(但前提是您使用最近的protocol=) Python 特定对象,例如类、函数等。(尽管在这里您应该查看cloudpickle

MsgPack 更适合以下情况:

    跨语言互操作。它是 JSON 的替代品,但有一些改进 文本数据和 Python 对象的性能。在任何设置下,它都比 Pickle 快得多。

正如上面提到的@Jeff this blogpost 可能会感兴趣

【讨论】:

我可以说pickle也不支持4D面板吗? @firefly:在 pandas 0.18 Panel4D 中是可腌制的。但请考虑使用 xarray 而不是 Panel4D。 to_msgpack() 因数据较大而崩溃,我不确定 to_pickle() 你所说的“更大数据的崩溃”是什么意思——你能扩展一下吗? 截至 2019 年,MsgPack 对 Pandas 的支持已被弃用,建议发送至use pyarrow instead。

以上是关于Pandas msgpack vs 泡菜的主要内容,如果未能解决你的问题,请参考以下文章

加载泡菜 NotFittedError:TfidfVectorizer - 未安装词汇

如何将 for 循环中的 .pkl 文件附加到 for 循环中创建的 pandas 数据帧?

将多行结构化流式传输到 pandas udf

如何解压 msgpack 文件?

无法为 Pascal VOC 泡菜数据集加载泡菜

kafka-msgpack-json: 将msgpack和protobuf转化成json