gpt4 book ai didi

python - 如何将 csv gzip 压缩到小于 100mb?

转载 作者:行者123 更新时间:2023-11-30 22:06:19 29 4
gpt4 key购买 nike

我有一个 df,我使用以下代码行将其编写为 gzip:

df.to_csv('filepath/file.csv.gz',compression='gzip',sep=',',index=False)

上面的行输出一个 117mb 的 gzip 压缩文件。如何使用 to_csv 中的 gzip 功能使文件大小更小?

编辑:

使用这行代码来确定我使用了多少内存:

df.info(memory_usage='deep')

得到了

memory usage: 9.9 GB

最佳答案

这只是我能做出的最小回应。了解数据帧的内存消耗以及哪些数据类型消耗更多内存非常重要。我会认真推荐this page了解有关内存的更多信息。

假设我有一个看起来像这样的小数据框,称为数字:

   Number Number2 Number3
0 1 "1" One
1 2 "2" Two
2 3 "3" Three
3 4 "4" Four

我想检查数字的数据类型:

print(df.dtypes)
>>> df.dtypes
Number int64
Number2 object
Number3 object
dtype: object

我们可以看到第 2 列被视为一个对象,尽管该列中的所有内容都只是一个用引号括起来的整数。在某些情况下,您可能希望将 int 视为字符串(例如,如果您尝试进行某种类型的字符串匹配),那么您不希望将类型从 object 转换为 int。但在这种情况下,这并不重要,您可以进行转换。让我们使用这个漂亮的小 pandas 对象内存检查器检查内存使用情况:

def mem_usage(pandas_obj):
if isinstance(pandas_obj,pd.DataFrame):
usage_b = pandas_obj.memory_usage(deep=True).sum()
else: # we assume if not a df it's a serie
usage_b = pandas_obj.memory(deep=True)
return "{:03.2f} B".format(usage_b)
print(mem_usage(df))
### >>> mem_usage(df)
### '459.00 B'

假设我有能力将数据类型从 object 更改为 int (我们需要先删除引号):

df['Number2'] = df.Number2.str.replace('"', '')
df['Number2'] = df.Number2.astype(int)
print(df.dtypes)
### >>> df.dtypes
### Number int64
### Number2 int32
### Number3 object
### dtype: object

print(mem_usage(df))
### >>> mem_usage(df)
### '299.00 B'
df.to_csv('./Desktop/numbers_fixed.csv', index=False)

就像这样,通过更改 dtype,我们将内存从 459B 变为 299B。想象一下,如果这是一个大型数据集,仅通过更改 dtype 即可减少 1.5 倍的内存。我并不是说任意执行此操作,但如果您正在处理外部数据或者您只是错误地解析了 df,则可能会发生这种类型的事情。整数或 float 可以作为对象读入,只需更改数据类型,您就会看到内存的巨大减少。只是为了显示这会延续到文件创建,请参见图像:

Memory Reduction

关于python - 如何将 csv gzip 压缩到小于 100mb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52766179/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com