有效地向pandas DataFrame添加行

时间:2018-01-17 12:12:42

标签: python pandas list performance

我正在尝试在python上创建一个简单的backtester,它允许我评估交易策略的表现。作为反向测试者的一部分,我需要记录发生的事务。例如,

Day     Stock    Action     Quantity
1       AAPL     BUY        20
2       CSCO     SELL       30
2       AMZN     SELL       50

在交易模拟期间,我需要添加更多交易。

最有效的方法是什么?我应该在模拟开始时创建一个transactions列表,并在我去的时候添加[5, 'AAPL', 'BUY', 20]等列表。我应该使用字典还是numpy数组?或者直接只是一个Pandas DataFrame?

谢谢,

杰克

1 个答案:

答案 0 :(得分:4)

list.append操作是amortised constant time操作,因为它只涉及转移指针。

OTOH,numpy.ndarraypd.DataFrame对象在内部表示为C中的数组,并且这些对象是不可变的。每次你"追加"对于数组/数据帧,您必须为旧数据的整个副本加上附加的重新分配新内存,并最终呈现线性复杂性。

因此,正如@ayhan在comment中所说,在list中累积数据,然后在完成后加载到数据框中。