以下を使用して、python pandasで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')
これは、実際のgzipアーカイブではなく、 'foo-YYYYMMDD.csv.gz'という名前のcsvを作成するだけです。
私もこれを追加しようとしました:
#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)
同様に失敗します。何か案は?
df.to_csv()
をキーワード引数compression='gzip'
とともに使用すると、gzipアーカイブが生成されます。私はあなたと同じキーワード引数を使用してテストしましたが、うまくいきました。
Gzipはバージョン0.17.1まで実装されていなかったため、パンダをアップグレードする必要がありますが、以前のバージョンでそれを使用しようとしてもエラーは発生せず、通常のcsvが生成されます。 pd.__version__
の出力を見ると、pandasの現在のバージョンを確認できます。
パンダでとても簡単にできます
import pandas as pd
書き込み a pandas gunzip圧縮csvとしてディスクへのデータフレーム
df.to_csv('dfsavename.csv.gz', compression='gzip')
読み取りディスクから
df = pd.read_csv('dfsavename.csv.gz', compression='gzip')
ドキュメント から
import gzip
content = "Lots of content here"
with gzip.open('file.txt.gz', 'wb') as f:
f.write(content)
pandas
で
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)
ここでのトリックはto_csv
ファイル名を渡さない場合、テキストを出力します。次に、そのテキストをgzip
のwrite
メソッドにリダイレクトします。
with gzip.open('foo-%s.csv.gz' % todaysdatestring, 'wb') as f:
f.write(df.to_csv(sep='|', index=False, quoting=csv.QUOTE_ALL))