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 - 未安装词汇