【发布时间】:2013-05-14 10:36:21
【问题描述】:
考虑以下示例:
准备数据:
import string
import random
import pandas as pd
matrix = np.random.random((100, 3000))
my_cols = [random.choice(string.ascii_uppercase) for x in range(matrix.shape[1])]
mydf = pd.DataFrame(matrix, columns=my_cols)
mydf['something'] = 'hello_world'
为 HDF5 设置尽可能高的压缩率:
store = pd.HDFStore('myfile.h5',complevel=9, complib='bzip2')
store['mydf'] = mydf
store.close()
另存为 CSV:
mydf.to_csv('myfile.csv', sep=':')
结果是:
-
myfile.csv大小为 5.6 MB -
myfile.h5大小为 11 MB
随着数据集变大,差异也越来越大。
我尝试过其他压缩方法和级别。这是一个错误吗? (我使用的是 Pandas 0.11 和最新的稳定版 HDF5 和 Python)。
【问题讨论】:
-
afaik HDF5 旨在优化查找时间.. 不是文件大小
-
字符串列也使用了每列的固定大小(即所有列的最大大小)。在文档中阅读有关 min_itemsize 的信息
-
请参阅此参考以获取我的上述评论:pandas.pydata.org/pandas-docs/dev/io.html#string-columns。此外。您的测试只是在 HDF5 中显示了一些开销。这是非常结构化的数据;用 1M 行浮点数尝试同样的事情,你会感到惊讶。
-
非常感谢@Jeff。我仍然不同意这一点。我创建的矩阵有 100 x 3000= 300,000 float64 值和只有 100 个字符串,并且它们都具有相同的值,我认为这应该从压缩中受益。尽管如此,它仍然比 CSV 文件占用 更多 空间,即使我使用了可能的最高压缩方案。这是预期的吗?
-
@user815423426 我的经历和你的一样 - hdf5 比 csv 占用更多的空间。
标签: python pandas hdf5 pytables