大数据集的hdf5和ndarray追加/高效时间方法

3 投票
1 回答
1308 浏览
提问于 2025-04-16 14:00

背景

我有一个包含 k 维时间序列的数据,每个时间序列用一个 m x (n+1) 的数组表示,里面存放的是浮点数值(n 列加上一列表示日期)。

举个例子:

大约有 400 万个时间序列,它们的样子是这样的:

20100101    0.12    0.34    0.45    ...
20100105    0.45    0.43    0.21    ...
...         ...     ...     ... 

每天,我想为一部分数据集(少于 k)添加一行新的数据。所有的数据集都存储在一个 hd5f 文件中的组里。

问题

有什么方法可以更快地把这些新行添加到数据集中呢?

输入是一个 CSV 文件,格式如下:

key1, key2, key3, key4, date, value1, value2, ... 

其中日期在特定文件中是唯一的,可以忽略。我大约有 400 万个数据集。问题是我需要查找关键字,获取完整的 numpy 数组,调整数组大小,添加新行,然后再存储这个数组。这个 hd5f 文件的总大小大约是 100 GB。有没有什么办法可以加快这个过程?我想我们都知道,使用 SQLite 或类似的东西是行不通的——因为一旦我把所有数据都拿到手,平均每个数据集会有超过 100 万个元素,乘以 400 万个数据集。

谢谢!

1 个回答

0

你有没有看过 PyTables?它是一个建立在HDF5库之上的分层数据库。

它有几种数组类型,但“表格”类型听起来很适合你的数据格式。简单来说,它就像是NumPy记录数组的磁盘版,每一列可以是不同的数据类型。表格还有一个添加方法,可以轻松地增加额外的行。

至于从CSV文件加载数据,numpy.loadtxt的速度相当快。它会把文件加载到内存中,变成一个NumPy记录数组。

撰写回答