DataFrame をシリアル化し、ネットワーク経由で送信する必要があります。セキュリティ上の理由から、ピクルスは使用できません。
これを行うための次の最速の方法は何でしょうか? v0.13 の msgpacks に興味をそそられましたが、何か間違ったことをしていない限り、パフォーマンスは pickle よりもはるかに悪いようです。
In [107]: from pandas.io.packers import pack
In [108]: df = pd.DataFrame(np.random.rand(1000, 100))
In [109]: %timeit buf = pack(df)
100 loops, best of 3: 15.5 ms per loop
In [110]: import pickle
In [111]: %timeit buf = pickle.dumps(df)
1000 loops, best of 3: 241 µs per loop
これまでに見つけた最良の方法は、array.tostring() を使用して同種の numpy 配列 (df.as_blocks() が便利でした) をシリアル化し、それらから DataFrame を再構築することです。性能はピクルスに匹敵します。
ただし、このアプローチでは、Numpy の fromstring() は dtype=object を逆シリアル化できないため、dtype=object の列 (つまり、少なくとも文字列を含むもの) を完全に文字列に変換する必要があります。ピクルは、オブジェクト列に混合型を保持することに成功しています (ピクル出力に何らかの関数が含まれているようです)。