将GZIP压缩应用于Python Pandas中的CSV

use*_*159 24 python csv gzip export-to-csv pandas

我正在尝试使用以下内容将数据帧写入python pandas中的gzip压缩包:

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')
Run Code Online (Sandbox Code Playgroud)

这只是创建了一个名为'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)
Run Code Online (Sandbox Code Playgroud)

哪个也失败了.有任何想法吗?

roo*_*oot 38

使用df.to_csv()关键字参数compression='gzip'应该生成一个gzip存档.我使用与您相同的关键字参数对其进行了测试,并且它有效.

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

  • 注意:由于连接gunzips会产生另一个有效的gunzip,因此您可以重复执行`df.to_csv(filename, compression='gzip', mode='a')`将数据帧合并到一个大的gunzip文件中。如果您的数据无法装入内存,则很有用。 (3认同)
  • 只是想添加一个记录限制,即“compression=gzip”仅在“.to_csv()”的第一个参数是文件名时才有效。如果它是文件对象,它将不起作用。 (2认同)
  • 请注意,“compression”的默认值是“infer”,这意味着压缩类型是从文件后缀推断的,因此您只需将“.gz”附加到文件名即可。 (2认同)

Ioa*_*ios 20

用熊猫很容易完成

import pandas as pd
Run Code Online (Sandbox Code Playgroud)

pandas数据帧写入 gunzip压缩csv

df.to_csv('dfsavename.csv.gz', compression='gzip')
Run Code Online (Sandbox Code Playgroud)

从光盘中读取

df = pd.read_csv('dfsavename.csv.gz', compression='gzip')
Run Code Online (Sandbox Code Playgroud)


piR*_*red 8

文档

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

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)
Run Code Online (Sandbox Code Playgroud)

to_csv如果你没有传递文件名,这里的技巧是输出文本.然后你只需重定向文本gzipwrite方法.