【问题标题】:Pandas msgpack vs picklePandas msgpack vs 泡菜
【发布时间】: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 仍然是序列化数据的首选方法,还是目前存在更好的替代方法?

【问题讨论】:

标签: python pandas msgpack


【解决方案1】:

泡菜更适合以下用途:

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

MsgPack 更适合以下情况:

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

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

【讨论】:

  • 我可以说pickle也不支持4D面板吗?
  • @firefly:在 pandas 0.18 Panel4D 中是可腌制的。但请考虑使用 xarray 而不是 Panel4D。
  • to_msgpack() 因数据较大而崩溃,我不确定 to_pickle()
  • 你所说的“更大数据的崩溃”是什么意思——你能扩展一下吗?
  • 截至 2019 年,MsgPack 对 Pandas 的支持已被弃用,建议发送至use pyarrow instead
猜你喜欢
  • 2012-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-29
  • 2018-09-09
  • 2017-11-09
  • 2011-01-16
相关资源
最近更新 更多