web-dev-qa-db-ja.com

Pandas msgpack vs pickle

msgpack in 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

質問:pickleの潜在的なセキュリティ問題からの助言として、pickleよりもmsgpackの利点は何ですか? pickleはまだデータをシリアライズする好ましい方法ですか、それとも現在より良い代替手段が存在しますか?

21
Alexander

ピクルスは次の場合に適しています:

  1. 数値データまたはバッファプロトコルを使用するもの(numpy配列)(やや最近のprotocol=を使用する場合のみ)
  2. クラス、関数などのPython固有のオブジェクト(ただし、ここではcloudpickleを確認する必要があります)

MsgPackは次の場合に適しています。

  1. 言語間の相互運用。 JSONに代わるものであり、いくつかの改良が加えられています
  2. テキストデータとPythonオブジェクトのパフォーマンス。これは、どの設定でも、これでピクルよりもまともな要素です。

@Jeffが前述したように このブログ投稿 は興味深いかもしれません

25
MRocklin