将 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))

来自documentation

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 如果您不向它传递文件名,它就会输出文本。然后您只需将该文本重定向到 gzipwrite 方法。

使用带有关键字参数 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')