我正在开发一个需要保存和加载多个项目的项目:
现在我想将所有数据存储在一个文件(或透明数据存储)中,但我不确定如何正确存储表格。
我应该如何保存表的轴标签,以保持数据编程语言的独立性?
答案 0 :(得分:3)
你的问题很广泛,但我会尽力消除一些神话来帮助你开始。我只有Python经验,所以我的例子只涉及到使用HDF5和Python。
Pandas或PyTables可以访问HDF5文件,但他们不允许这样做 我认为存储普通的NumPy数组。
你是正确的,因为PyTables不允许你保存一个简单的NumPy数组而没有任何额外的开销。但是你不需要来使用PyTables。 h5py
提供类似NumPy的接口,用于在HDF5文件中存储和访问数组。
存储NumPy数组
import h5py, numpy as np
arr = np.random.randint(0, 10, (1000, 1000))
f = h5py.File('file.h5', 'w', libver='latest') # use 'latest' for performance
dset = f.create_dataset('array', shape=(1000, 1000), data=arr, chunks=(100, 100)
compression='gzip', compression_opts=9)
根据您的要求,您可以进一步探索压缩和分块选项,以优化读/写性能和压缩比。但请注意,gzip
是所有HDF5安装附带的少数压缩过滤器之一。
将轴标签存储为属性
属性类似于数据集,允许您存储各种数据,包括标量或数组。
dset.attrs['Description'] = 'Some text snippet'
dset.attrs['X-Labels'] = np.arange(1000)
dset.attrs['Y-Labels'] = np.arange(1000)
在内部,数据不是存储为NumPy数组,而是存储在数据类型敏感的连续内存块中,符合HDF5规范。因此,您将能够从任何HDF5 API读取这些文件。
值得注意的是,确保字符串可传输有特定要求,有关详细信息,请参阅h5py
文档中的Strings in HDF5。