python - PyTables 批量获取和更新

标签 python hdf5 pytables

我将每日股票数据作为使用 PyTables 创建的 HDF5 文件。我想获取一组行,将其作为数组处理,然后使用 PyTables 将其写回磁盘(更新行)。我想不出一种方法来干净地做到这一点。你能告诉我什么是完成这个的最好方法吗?

我的数据:

Symbol, date, price, var1, var2
abcd, 1, 2.5, 12, 12.5
abcd, 2, 2.6, 11, 10.2
abcd, 3, 2.45, 11, 10.3
defg, 1,12.34, 19.1, 18.1
defg, 2, 11.90, 19.5, 18.2
defg, 3, 11.75, 21, 20.9
defg, 4, 11.74, 22.2, 21.4

我想读取与每个符号对应的行作为数组,进行一些处理并更新字段 var1 和 var2。我事先知道所有的符号,所以我可以遍历它们。我试过这样的事情:

rows_array = [row.fetch_all_fields() for row in table.where('Symbol == "abcd"')]

我想将 rows_array 传递给另一个函数,该函数将计算 var1 和 var2 的值并为每条记录更新它。请注意,var1、var2 就像移动平均线,因此我无法在迭代器内计算它们,因此需要将整组行作为一个数组。

在我使用 rows_array 计算我需要的任何内容后,我不确定如何将它写回数据,即用新的计算值更新行。更新整个表时,我使用这个:

 table.cols.var1[:] = calc_something(rows_array)

但是,当我只想更新表的一部分时,我并不是最好的方法。我想我可以重新运行“where”条件,然后根据我的计算更新每一行,但这似乎是在浪费时间重新扫描表格。

感谢您的建议...

谢谢, -e

最佳答案

如果我理解的很好,接下来应该做你想做的:

condition = 'Symbol == "abcd"'
indices = table.getWhereList(condition)  # get indices
rows_array = table[indices]  # get values
new_rows = compute(rows_array)   # compute new values
table[indices] = new_rows  # update the indices with new values

希望对你有帮助

关于python - PyTables 批量获取和更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5037172/

相关文章:

python - 避免迭代太多时间——算法构建

python - 基于字典将 3D 数组转换为 2D 数组

python - 从 HDF5 文件读取和写入 numpy 数组

Python 正则表达式引擎 - "look-behind requires fixed-width pattern"错误

python - 用 pandas 读取 hdf5 数据集

python - 无法在 Windows 上安装 PyTables

python - 有条件地将 HDF5 文件读取到 pandas DataFrame

python - 在同一 Python 进程中同时使用 h5py 和 pytables

python - 在 PyTables 中,如何创建可变长度的嵌套数组?

python - 如何自定义pytest名称