PyTables 批量获取和更新
我有一个每天的股票数据,存储在一个用PyTables创建的HDF5文件里。我想从中获取一组行,把它处理成一个数组,然后再写回磁盘(更新这些行),但是我找不到一个简单的方法来做到这一点。你能告诉我最好的方法是什么吗?
我的数据:
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
1 个回答
10
如果我理解得没错,下面的代码应该能满足你的需求:
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
希望这对你有帮助