在Python中将GZIP压缩应用于CSV

在Python中将GZIP压缩应用于CSV,python,pandas,gzip,Python,Pandas,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 todaysdate

我正在尝试使用以下方法将数据帧写入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 yyymmdd.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))
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
方法。

使用
df.to_csv()
和关键字参数
compression='gzip'
应该会生成一个gzip存档。我使用与您相同的关键字参数对其进行了测试,结果成功了


您可能需要升级pandas,因为gzip直到版本0.17.1才实现,但在以前的版本中尝试使用它不会引发错误,只会生成一个常规的csv。您可以通过查看
pd的输出来确定当前的pandas版本。\uuuu version\uuuu

使用pandas可以非常轻松地完成此操作

import pandas as pd
将熊猫数据帧以gunzip压缩的csv格式写入光盘

df.to_csv('dfsavename.csv.gz', compression='gzip')
从光盘读取

df = pd.read_csv('dfsavename.csv.gz', compression='gzip')

使用
df.to_csv
compression='gzip'
为我生成一个gzip存档。我使用了与您相同的关键字参数。你使用的熊猫是什么版本的?请参阅
pd.\uuuuu version\uuuu
的输出以确定这一点。看起来gzip直到0.17.1才实现,但是在早期版本中尝试使用它不会产生错误。下面是一些经过测试的例子。事实上,我建议切换到HDF5,它更快更方便@根,这就是问题所在!我从命令行运行了
easy_install--upgrade pandas
,并从16.1升级到18.1,顶部的“#Create csv with gzip compression”代码工作正常。我应该编辑/删除主要帖子来反映这一点吗?我会写下我的评论作为回答,你可以接受。@cᴏʟᴅsᴘᴇᴇᴅ 阅读“如果您正在使用Jupyter笔记本电脑,您只需键入
?df.to_csv
即可。只需添加一个文件限制,即
compression=gzip
仅在
.to_csv()
的第一个参数是文件名时有效。如果它是一个文件对象,它将不起作用。注意:由于串联gunzips会产生另一个有效的gunzip,因此可以重复执行
df.to_csv(filename,compression='gzip',mode='a')
将数据帧合并到一个大的gunzipped文件中。如果您的数据不适合内存,则此选项非常有用。请注意,
压缩的默认值是
'expert'
,这意味着压缩类型是从文件后缀推断出来的,因此您只需将
.gz
附加到文件名.df.to_csv(文件名,compression='gzip',mode='a')就可以了,正在更新gzip中的csv文件。我的工作似乎不顺利。当函数被调用时,每一行被读入df一次,因此这个操作应该使用append功能重复。这比简单地将参数传递给gzip更有效吗?我目前(在键入此内容时)正在从一个旧数据库中提取大约40gb的表,并决定循环遍历每个表,然后用
compression='gzip'
答案写出每个迭代,但不知道我是否应该使用此选项
df = pd.read_csv('dfsavename.csv.gz', compression='gzip')