2013-04-05 2 views
1

저는 파이썬에서 1 년 동안 주식 포트폴리오를 추적하는 작은 프로그램을 작성하려고합니다. 기본적으로 모든 매수/매도를 등록하고 잔액을 추적합니다. 필자는 주문 목록을 검토하고 Pandas 데이터 프레임을 업데이트하고 포트폴리오를 보관합니다. (python pandas set_value가 지속되지 않습니까?

orders_book = DataFrame(np.zeros((num_of_days,num_of_companies+1)), ldt_timestamps, columns = book_keys) 

for equity_sym in ls_symbols[1:2]: 
    for trade_date in ldt_timestamps: 
     if trade_date == ldt_timestamps[0]: 
      current_number = orders_book.xs(trade_date)[equity_sym] 
     for transaction in trades: 
      transaction_date = transaction[0] 
      transaction_sym = transaction[1] 
      if ((trade_date == transaction_date) and (equity_sym == transaction_sym)): 
       transaction_order = transaction[2] 
       transaction_number = transaction[3] 
       if str(transaction_order) == 'Buy': 
        current_number += transaction_number 
       if str(transaction_order) == 'Sell': 
        current_number -= transaction_number 
     orders_book.ix[trade_date,equity_sym, current_number] = current_number 

가 [equity_sym] 은 내가 런타임에 인쇄하여 나는이 복잡한 루프가 확인 작동하는지 확인 당신을 설득 의견 유지 : 코드는 매우 불분명 보이지만 나는 팬더/NumPy와 아주 새로운 해요 보시다시피 orders_bookset_value을 사용하여 업데이트합니다. 그러나 루프가 끝나고 간단히 print orders_book['GOOG']으로 시도하면 orders_book은 시작 부분, 즉 before 루프처럼 보입니다. 왜 그런가요? 도와 주셔서 감사합니다.

편집 : 코드가 변경되었으며 제대로 작동합니다. Panda의 잘못은 아니지만 코드에서 업데이트/쓰기 기능을 잘못 배치 한 것입니다. 노력에 감사드립니다!

+0

'set_value '의 의미는 애매한 것으로 보이며, 새로운 DataFrame을 생성 할 수 있습니다. – Eike

+1

대신'orders_book.ix [trade_date, equity_sym] = current_number'와 같은 것을 시도하십시오. –

+0

@ChangShe : 불행히도 도움을 얻지 못했습니다 –

답변

0

팬더의 저자 this answer에 따르면 set_value은 새 개체에 대한 참조를 반환합니다. 데이터 표에 행을 추가하려면 concat 또는 append을 사용해야합니다. 팬더 매뉴얼의 "Merge, join, and concatenate" 섹션을 참조하십시오.

+0

하지만 제가 추가하는 것보다 수정하는 것이 좋습니까? –