12

と呼ばれるパンダデータフレームがありますdf

これをgzip形式で保存したい。これを行う 1 つの方法は次のとおりです。

import gzip
import pandas

df.save('filename.pickle')
f_in = open('filename.pickle', 'rb')
f_out = gzip.open('filename.pickle.gz', 'wb')
f_out.writelines(f_in)
f_in.close()
f_out.close()

ただし、これには、最初に というファイルを作成する必要がありますfilename.pickle。これをより直接的に行う方法、つまり を作成せずに行う方法はありfilename.pickleますか?

gzip されたデータフレームをロードする場合は、filename.pickle を作成する同じ手順を実行する必要があります。たとえば filename2.pickle.gzip、gzip された pandas データフレームである file を読み取るには、次の方法を知っています。

f_in = gzip.open('filename2.pickle.gz', 'rb')
f_out = gzip.open('filename2.pickle', 'wb')
f_out.writelines(f_in)
f_in.close()
f_out.close()

df2 = pandas.load('filename2.pickle')

最初に作成せずにこれを行うことはできますfilename2.pickleか?

4

3 に答える 3

16

最近、圧縮によるより優れたシリアル化が Pandas に追加されました。(pandas 0.20.0 以降。)使用方法の例を次に示します。

df.to_csv("my_file.gz", compression="gzip")

利用可能なさまざまな形式の圧縮などの詳細については、 docs を確認してください

于 2016-05-19T15:33:49.500 に答える
2

何らかの理由で、Python zlib モジュールには gzip データを解凍する機能がありますが、その形式に直接圧縮する機能はありません。少なくとも文書化されている限り。これは、「gzip と互換性のある圧縮」という非常に誤解を招くドキュメント ページ ヘッダーにもかかわらずです。

またはを使用する代わりにzlib 形式に圧縮してから、zlib ヘッダーとトレーラーを取り除き、gzip ヘッダーとトレーラーを追加できます。これは、zlib 形式と gzip 形式の両方が同じ圧縮データ形式を使用するためです。これにより、 gzip 形式のデータが得られます。zlib ヘッダーは 2 バイト、トレーラーは 4 バイトに固定されているため、簡単に削除できます。次に、10 バイトの基本的な gzip ヘッダー(C 文字列形式) を先頭に追加し、4 バイトの CRC をリトル エンディアン順に追加します。CRC は を使用して計算できます。zlib.compresszlib.compressobj"\x1f\x8b\x08\0\0\0\0\0\0\xff"zlib.crc32

于 2012-10-23T15:18:42.117 に答える
1

pickle.dumps を使用してデータフレームを文字列にダンプし、 import gzip でディスクに書き込むことができます

file = gzip.GzipFile('filename.pickle.gz', 'wb', 3)
file.write(pickle.dumps(df))
file.close()
于 2013-06-22T22:03:33.303 に答える