Pandas msgpack 与 pickle
Pandas msgpack vs pickle
msgpack
in Pandas 应该是 pickle
.
的替代品
This is a lightweight portable binary format, similar to binary JSON,
that is highly space efficient, and provides good performance both on
the writing (serialization), and reading (deserialization).
但是,我发现它的性能似乎无法与 pickle 相提并论。
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 是否仍然是序列化数据的首选方法,或者目前是否存在更好的替代方法?
Pickle 更适合以下情况:
- 数值数据或任何使用缓冲协议(numpy 数组)的数据(尽管只有当您使用较新的
protocol=
)
- Python 特定对象,例如 类、函数等。(尽管您应该在此处查看
cloudpickle
)
MsgPack 更适用于以下内容:
- 跨语言互操作。它是 JSON 的替代品,但有一些改进
- 文本数据和 Python 对象的性能。在任何环境下,它都比 Pickle 快得多。
正如上面提到的@Jeff this blogpost 可能会引起兴趣
msgpack
in Pandas 应该是 pickle
.
This is a lightweight portable binary format, similar to binary JSON, that is highly space efficient, and provides good performance both on the writing (serialization), and reading (deserialization).
但是,我发现它的性能似乎无法与 pickle 相提并论。
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 是否仍然是序列化数据的首选方法,或者目前是否存在更好的替代方法?
Pickle 更适合以下情况:
- 数值数据或任何使用缓冲协议(numpy 数组)的数据(尽管只有当您使用较新的
protocol=
) - Python 特定对象,例如 类、函数等。(尽管您应该在此处查看
cloudpickle
)
MsgPack 更适用于以下内容:
- 跨语言互操作。它是 JSON 的替代品,但有一些改进
- 文本数据和 Python 对象的性能。在任何环境下,它都比 Pickle 快得多。
正如上面提到的@Jeff this blogpost 可能会引起兴趣