将 GZIP 压缩应用于 Python Pandas 中的 CSV
Apply GZIP compression to a CSV in Python Pandas
我正在尝试将数据帧写入 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')
这只会创建一个名为 'foo-YYYYMMDD.csv.gz' 的 csv,而不是实际的 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)
这也失败了。有任何想法吗?
with gzip.open('foo-%s.csv.gz' % todaysdatestring, 'wb') as f:
f.write(df.to_csv(sep='|', index=False, quoting=csv.QUOTE_ALL))
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
方法。
使用带有关键字参数 compression='gzip'
的 df.to_csv()
应该会生成一个 gzip 存档。我使用与您相同的关键字参数对其进行了测试,并且有效。
您可能需要升级 pandas,因为 gzip 直到版本 0.17.1 才实现,但尝试在以前的版本上使用它不会引发错误,只会生成常规 csv。您可以通过查看 pd.__version__
.
的输出来确定 pandas 的当前版本
用 pandas
很容易做到
import pandas as pd
将 一个 pandas 数据帧写入光盘作为 gunzip 压缩的 csv
df.to_csv('dfsavename.csv.gz', compression='gzip')
从光盘读取
df = pd.read_csv('dfsavename.csv.gz', compression='gzip')
我正在尝试将数据帧写入 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')
这只会创建一个名为 'foo-YYYYMMDD.csv.gz' 的 csv,而不是实际的 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)
这也失败了。有任何想法吗?
with gzip.open('foo-%s.csv.gz' % todaysdatestring, 'wb') as f:
f.write(df.to_csv(sep='|', index=False, quoting=csv.QUOTE_ALL))
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
方法。
使用带有关键字参数 compression='gzip'
的 df.to_csv()
应该会生成一个 gzip 存档。我使用与您相同的关键字参数对其进行了测试,并且有效。
您可能需要升级 pandas,因为 gzip 直到版本 0.17.1 才实现,但尝试在以前的版本上使用它不会引发错误,只会生成常规 csv。您可以通过查看 pd.__version__
.
用 pandas
很容易做到import pandas as pd
将 一个 pandas 数据帧写入光盘作为 gunzip 压缩的 csv
df.to_csv('dfsavename.csv.gz', compression='gzip')
从光盘读取
df = pd.read_csv('dfsavename.csv.gz', compression='gzip')