python pandas set_value不是持久的吗?

时间:2013-04-05 19:11:03

标签: python pandas setvalue

我正在尝试用Python编写一个小程序来跟踪一年内的股票投资组合,因此基本上记录每次买入/卖出,并跟踪余额。我正在查看订单列表并更新Pandas数据框,我保留了投资组合。代码看起来很模糊,但我对Pandas / numpy很新:

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] 我保留了注释,说服你通过在运行时打印我检查了这个复杂的循环是否正常(如你所见,我使用orders_book更新set_value)。但是,当循环结束时,我只尝试print orders_book['GOOG'],那么orders_book看起来就像在开始时,即在循环之前。这是为什么?非常感谢您的帮助:)

编辑: 代码现在已更改并正常运行。这不是Panda的错,而是在代码中错误地放置了更新/写入功能。谢谢你的努力!

1 个答案:

答案 0 :(得分:0)

根据Pandas的作者this answerset_value返回对新对象的引用。您需要使用concatappend向数据表添加行。请参阅Pandas手册中的"Merge, join, and concatenate"部分。