Pandas msgpack vs pickle

msgpack dans Pandas est supposé remplacer pickle .

Par le Pandas docs sur msgpack :

c'est un format binaire portable léger, similaire à JSON binaire, qui est très efficace dans l'espace, et offre de bonnes performances à la fois sur l'écriture (sérialisation) et la lecture (désérialisation).

je trouve, cependant, que son la performance ne semble pas empiler contre 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

Question: outre les problèmes de sécurité potentiels avec pickle, quels sont les avantages de msgpack sur pickle? Pickle est-il toujours la méthode privilégiée pour sérialiser les données, ou Existe-t-il actuellement de meilleures solutions de rechange?

15
demandé sur Alexander 2015-06-04 21:43:54

1 réponses

Cornichon est mieux pour le suivant:

  1. données numériques ou tout ce qui utilise le protocole buffer (tableaux numpy) (bien que seulement si vous utilisez un protocol= assez récent)
  2. Python objets spécifiques comme les classes, les fonctions, etc.. (bien qu'ici vous devriez regarder cloudpickle )

MsgPack est meilleur pour les suivants:

  1. Croix de la langue d'interopérabilité. C'est une alternative à JSON avec quelques améliorations
  2. la Performance sur les données de texte et des objets Python. C'est un décent facteur plus vite que Pickle à ce sous n'importe quel paramètre.

@Jeff l'a noté ci-dessus ce blog peuvent être d'intérêt

19
répondu MRocklin 2017-10-26 17:38:37