我知道通过将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。
答案 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())