首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么使用独立压缩和pandas to_csv(,bzip2 =‘bz2’)函数会有文件大小的不同?

为什么使用独立压缩和pandas to_csv(,bzip2 =‘bz2’)函数会有文件大小的不同?
EN

Stack Overflow用户
提问于 2020-05-22 23:56:27
回答 2查看 132关注 0票数 0

我使用pandas写出一个csv,并应用bzip2压缩,如下所示:

代码语言:javascript
运行
复制
df.to_csv('/home/user/file.bz2', index=False, mode=writemode, header=header)

根据documentationto_csv从文件名中推断出需要使用bzip2方法进行压缩。

这可确保我的~100MB CSV变为~23MB。

但是,如果我解压bz2文件,并在我Mac上通过bzip2运行生成的csv文件:

代码语言:javascript
运行
复制
bzip2 /home/user/file

我得到了一个~7MB的文件!如果我在Debian上运行bzip2,也会得到同样的结果。

造成这种差异的原因是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-24 03:45:43

事实证明,这不是由过时的熊猫造成的,而是由我这边的错误预期造成的。

我实际上是通过在一天的过程中(准确地说是每分钟)附加到csv来创建数据集的,如下所示:

代码语言:javascript
运行
复制
if first_data_of_the_day:
    df.to_csv('/home/user/file.bz2', index=False, mode='w', header=True)
else:
    df.to_csv('/home/user/file.bz2', index=False, mode='a', header=False)

这会产生更大的~23MB文件。

如果我全天将数据帧存储在内存中(或csv中),并且在结束时只写出一次压缩文件,我得到的是更小的~7MB文件,而不管pandas的版本如何。

票数 0
EN

Stack Overflow用户

发布于 2020-05-23 00:43:03

我不确定在您的情况下是否发生了这种情况,但是bzip2确实支持在速度和大小之间进行折衷的不同压缩级别,并且通过pandas选择的压缩级别可能与CLI工具的默认级别不同。使用bz2库:

代码语言:javascript
运行
复制
In [118]: df = pd.DataFrame(np.random.randint(0, 100, [100000,5]))

In [119]: len(df.to_csv(None))
Out[119]: 2138880

In [120]: len(bz2.compress(df.to_csv(None).encode('ascii'), compresslevel=1))
Out[120]: 702709

In [121]: len(bz2.compress(df.to_csv(None).encode('ascii'), compresslevel=9))
Out[121]: 730415

这个有点奇怪,因为压缩9通常被认为更慢但更小,但它是我在这里生成的一个非常简单的数据集,所以它可能只是一个有点退化的情况。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61959018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档