2016-05-12 5 views
6

PythonのパンダにCSVにGZIP圧縮を適用します。は、私は、以下のものを使用して、Pythonのパンダでgzip圧縮されたCSVファイルへのデータフレームを記述しようとしています

import pandas as pd 
import datetime 
import csv 
import gzip 

# Get data (with previous connection and script variables) 
df = pd.read_sql_query(script, conn) 

# Create today's date, to append to file 
todaysdatestring = str(datetime.datetime.today().strftime('%Y%m%d')) 
print todaysdatestring 

# Create csv with gzip compression 
df.to_csv('foo-%s.csv.gz' % todaysdatestring, 
     sep='|', 
     header=True, 
     index=False, 
     quoting=csv.QUOTE_ALL, 
     compression='gzip', 
     quotechar='"', 
     doublequote=True, 
     line_terminator='\n') 

これは単に「FOO-YYYYMMDD.csvと呼ばれるcsvファイルを作成します.gz '、実際のgzipアーカイブではありません。

また、私はこれを追加しようとしました:

#Turn to_csv statement into a variable 
d = df.to_csv('foo-%s.csv.gz' % todaysdatestring, 
     sep='|', 
     header=True, 
     index=False, 
     quoting=csv.QUOTE_ALL, 
     compression='gzip', 
     quotechar='"', 
     doublequote=True, 
     line_terminator='\n') 

# Write above variable to gzip 
with gzip.open('foo-%s.csv.gz' % todaysdatestring, 'wb') as output: 
    output.write(d) 

としても失敗します。何か案は?あなたはそれのファイル名合格しない場合

+3

としてディスクにパンダのデータフレームを非常に簡単に行われていますdf.to_csv'に 'compression = 'gを指定するとzip''は私のためにgzipアーカイブを生成します。私はあなたと同じキーワード引数を使用しました。あなたが使っているパンダのバージョンは?これを確認するには 'pd .__ version__'の出力を見てください。 gzipは0.17.1まで実装されていないようですが、以前のバージョンで使用しようとしてもエラーは発生しません。 @rootとして – root

+0

は、すでに述べている - それは( '圧縮= 'gzip''を指定して)ちょうどそのように動作するはずです。あなたは – MaxU

+0

[ここ](http://stackoverflow.com/a/37012035/5741205)は、いくつかの__tested__例です 'gzip'モジュールヨーヨーを使用する必要はありません。実際には私はHDF5に切り替えることをお勧めします - それはずっと速く便利です! – MaxU

答えて

10

はgzipでアーカイブを作成する必要があります。私はあなたと同じキーワード引数を使ってテストしました。

gzipはバージョン0.17.1まで実装されていないため、アップグレードする必要があるかもしれませんが、以前のバージョンで使用しようとしてもエラーは発生せず、通常のcsvが生成されます。 pd.__version__の出力を見れば、現在のパンダのバージョンを知ることができます。

+0

本当に有益です、ありがとうございます。他の圧縮メカニズムもサポートされていますか? –

+0

@cᴏʟᴅs[[documentation](https://pandas.pydata。org/pandas-docs/stable/generated/pandas.DataFrame.to_csv.html) Jupyterノートブックで作業している場合は、 '?df.to_csv'と入力するだけです – user32185

0
with gzip.open('foo-%s.csv.gz' % todaysdatestring, 'wb') as f: 
    f.write(df.to_csv(sep='|', index=False, quoting=csv.QUOTE_ALL)) 
5

import gzip 


content = df.to_csv(
     sep='|', 
     header=True, 
     index=False, 
     quoting=csv.QUOTE_ALL, 
     quotechar='"', 
     doublequote=True, 
     line_terminator='\n') 

with gzip.open('foo-%s.csv.gz' % todaysdatestring, 'wb') as f: 
    f.write(content) 

pandasdocumentation

import gzip 
content = "Lots of content here" 
with gzip.open('file.txt.gz', 'wb') as f: 
    f.write(content) 

からのトリックは、ここでそのto_csv出力テキストであること。その後、そのテキストをgzipwriteメソッドにリダイレクトするだけです。キーワード引数compression='gzip'df.to_csv()を使用して

+0

応答ありがとう!これも同様に機能しました。 – user2752159

3

それはパンダ

import pandas as pd 

書き込み `使用gunzipは圧縮されたCSV

df.to_csv('dfsavename.csv.gz', compression='gzip') 
ディスクから

読む

df = pd.read_csv('dfsavename.csv.gz', compression='gzip') 
関連する問題