加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – PyTables批量获取和更新

发布时间:2021-02-20 18:04:31 所属栏目:Python 来源:互联网
导读:我有每日库存数据作为使用PyTables创建的HDF5文件.我想获得一组行,将其作为一个数组处理,然后使用PyTables将其写回磁盘(更新行).我无法想办法干净利落地做到这一点.能不能让我知道最好的方法是什么? 我的数据: Symbol, date, price, var1, var2abcd, 1, 2.5

我有每日库存数据作为使用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,10.3
defg,12.34,19.1,18.1
defg,11.90,19.5,18.2
defg,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的值并为每条记录更新它.请注意,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

希望这可以帮助

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读