2012-04-12 7 views
4

Я хочу использовать базу данных pandas для отслеживания некоторых рыночных данных, которые я буду загружать вживую в течение торгового дня.Лучший способ вставить новое значение

Предположим, я хочу зачислить цены на AAPL и GOOG. Я начинаю с создания dataframe:

prices = DataFrame(columns = ['AAPL', 'GOOG']) 

Скажем, первый DataPoint приходит в момент времени t1 и цена 555,0 для AAPL. И затем, несколько секунд спустя, в t2, для GOOG стоит цена 430,0.

Один, конечно, не может сделать:

prices['AAPL'][t1] = 555.0 
prices['GOOG'][t2] = 430.0 

Есть простой/быстрый способ в панд, чтобы выполнить это, хотя, кроме потянув индекс, изменяя его, переиндексации в dataframe, а затем вставить каждый скалярную цену как он приходит?

ответ

3

Проверьте метод set_value (который возвращает ссылку на новый объект, если размер, если он был изменен). Но не стоит ожидать, что это будет быстро (по сравнению с вложенным Словарем):

In [7]: prices 
Out[7]: 
Empty DataFrame 
Columns: array([AAPL, GOOG], dtype=object) 
Index: array([], dtype=object) 

In [8]: prices = prices.set_value(t1, 'AAPL', 5) 

In [9]: prices 
Out[9]: 
          AAPL GOOG 
2012-04-12 18:02:28.178331  5 NaN 

Было бы неплохо добавить метод в каком-то момент для более эффективного изменения размера DataFrame склеивания по данным на конце (NumPy имеет возможность для этого).

+0

Спасибо! Я думаю, если скорость станет проблемой, тогда, как вы сказали, создайте вложенный dict, а затем в какой-то момент конвертируйте в dataframe. – geronimo

Смежные вопросы