小编典典

Pandas 包装与pickle

python

msgpack在pandas中应该被取代pickle

根据msgpack上Pandas文档

这是一种轻便的可移植二进制格式,类似于二进制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

问题: 除了泡菜的潜在安全问题之外,msgpack相对于泡菜有什么好处?pickle仍然是序列化数据的首选方法,还是目前存在更好的替代方法?


阅读 225

收藏
2021-01-20

共1个答案

小编典典

泡菜在以下方面更好:

  1. 数值数据或使用缓冲协议的任何数据(numpy数组)(尽管仅当您使用较新的时protocol=
  2. Python特定对象,例如类,函数等。(尽管您应该在此处查看cloudpickle

MsgPack适用于以下情况:

  1. 跨语言互操作。它是JSON的替代品,并做了一些改进
  2. 文本数据和Python对象的性能。在任何情况下,这都是比Pickle更快的体面因素。

就像@Jeff上面提到的那样,此博客文章可能很有趣

2021-01-20