我有一份使用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
price = table.cols.price[indices]
。但是却收到了以下错误提示: File "/Library/Python/2.6/site-packages/tables/table.py", line 3063, in getitem "'%s' key type is not valid in this context" % key) TypeError: '[ 0 1 2 3 4 5 6 7 8 9 10]' 关键字类型在此上下文中无效。 有什么建议可以从索引中提取整个列吗? - Ecogniumprice = table[indices]['price']
这个方法,它也非常高效。 - FrancescAlted