【发布时间】:2017-05-01 14:13:23
【问题描述】:
我有一些时间序列数据,我之前使用pytables 存储为 hdf5 文件。我最近尝试使用h5py lib 存储相同的内容。但是,由于 numpy 数组的所有元素都必须具有相同的 dtype,因此我必须在使用 h5py lib 存储之前将日期(通常是索引)转换为“float64”类型。 当我使用pytables 时,索引及其数据类型被保留,这使我可以查询时间序列,而无需将其全部拉入内存。我想h5py 这是不可能的。我在这里遗漏了什么吗? 如果没有,在什么情况下我应该使用h5py lib 来存储时间序列数据?我问这个问题的原因,明确这一点可以帮助我设计一个更高效(处理和存储方面)的项目。
下面是简单的代码,我必须丢失索引信息才能将其存储为单个 dtype 对象
dt_range = pd.date_range('2016-12-01','2016-12-10')
data = np.arange(0,20).reshape(-1,2)
df = pd.DataFrame(data,index = dt_range, columns = list('ab'), dtype = 'float')
df.index = df.index.to_julian_date()
df = df.reset_index()
h = h5py.File(r'path\temp.h5', 'w')
dset = h.create_dataset('temp',data = df.values, shape = (10,3))
【问题讨论】:
-
你能用'h5py'读取'tables'创建的文件吗?
-
我不确定我这样做是否正确,但是虽然 'h5py' 可以识别通过 'pytables' 创建的文件(例如:h.keys() 命令),但当我尝试读取相同的文件时(例如:h['pytable-filename'][:]),它会抛出这个错误:'AttributeError: 'slice' object has no attribute 'encode'
-
我没有与
pytables合作过。h5py使文件数据序列的外观和行为类似于numpy数组。这就是您的df.values正在保存的内容。您可能还需要将 pandas 索引提取到数组中,然后编写它。你知道很多numpy,还是只知道pandas? -
pandas 索引可能可以写为
h5维度比例,但我没有使用过。
标签: python pandas numpy pytables h5py