【发布时间】:2015-08-19 12:43:20
【问题描述】:
Pandas 中的msgpack 应该是pickle 的替代品。
这是一种轻量级的可移植二进制格式,类似于二进制 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 非常棒。