Пакетное получение и обновление PyTables

У меня есть ежедневные данные о запасах в виде файла HDF5, созданного с помощью PyTables. Я хотел бы получить группу строк, обработать ее как массив, а затем записать обратно на диск (обновить строки) с помощью 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"')]

Я хотел бы передать row_array другой функции, которая будет вычислять значения для var1 и var2 и обновлять их для каждой записи. Обратите внимание, что var1, var2 похожи на скользящие средние, поэтому я не смогу вычислить их внутри итератора, и, следовательно, необходимо, чтобы весь набор строк был массивом.

После того, как я вычислил все, что мне нужно, с помощью rows_array, я не уверен, как записать это обратно в данные, т.е. обновить строки с новыми вычисленными значениями. При обновлении всей таблицы я использую следующее:

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

Однако, когда я хочу обновить только часть таблицы, я не лучший способ сделать это. Думаю, я могу повторно запустить условие 'where', а затем обновить каждую строку на основе моих вычислений, но это ' s кажется пустой тратой времени повторное сканирование таблицы.

Ваши предложения приветствуются ...

Спасибо, -e

6
задан Ecognium 18 February 2011 в 02:50
поделиться