我可以使用pandas附加到压缩流吗?

时间:2016-07-29 09:21:08

标签: python csv pandas gzip

我知道通过将compression='gzip'参数传递给pd.read_csv(),我可以将DataFrame保存到压缩的CSV文件中。

my_df.to_csv('my_file_name.csv', compression='gzip')

我也知道,如果我想追加数据框添加到现有CSV文件的末尾,我可以使用mode='a',就像这样

my_df.to_csv('my_file_name.csv', mode='a', index=False)

但是,如果我想将DataFrame附加到压缩CSV文件的末尾怎么办?这甚至可能吗?我尝试用

这样做
my_df.to_csv('my_file_name.csv', mode='a', index=False, compression='gzip')

但是生成的CSV没有被压缩,尽管情况很好。

这个问题的动机是我使用Pandas处理大型CSV文件。我需要生成压缩的CSV输出,并将块文件中的CSV文件处理成DataFrame,这样我就不会遇到MemoryError。因此,对我来说,最看似合乎逻辑的事情是将每个输出DataFrame块一起附加到一个压缩的zip文件中。

我正在使用Python 3.4和Pandas 0.16.1。

3 个答案:

答案 0 :(得分:1)

最新答案:使用熊猫 1.2.4 为我工作

代码:

df.to_csv('test.csv', mode='a', compression='gzip')
new_df = pd.read_csv('test.csv', compression='gzip')

df.shape[0] # 1x
new_df.shape[0] # 2x

答案 1 :(得分:0)

您可以执行以下操作

import gzip

with gzip.open('my_file_name.csv.gz', 'a') as compressed_file:
    df.to_csv(compressed_file, index=False)

因为熊猫.to_csv方法接受路径或类似文件的对象。

答案 2 :(得分:0)

以上答案似乎不再起作用。当df.to_csv()没有任何路径或类似文件的对象时,它将以字符串形式返回数据帧。可以将其编码并写入gzip文件。

import gzip

with gzip.open('my_file_name.csv.gz', 'a') as compressed_file:
    compressed_file.write(df.to_csv().encode())