首页 > 解决方案 > 熊猫数据框追加的效率

问题描述

我发现dataframe的检索速度非常快。我创建了 100 万行数据框,过滤所需数据只用了不到 1 秒。但是为什么我使用 append 方法将数据添加到空数据帧时会这么慢?

这是我的代码,执行时间超过 2 小时。我错过了什么?或者有没有比 df.append 方法更好的添加数据的方法?

import pandas as pd
import datetime
import random

data = pd.DataFrame(columns=('Open','High','Low','Close','Avg20'))
start = datetime.datetime.now()
for i in range(1000000):
        if i % 10000 == 0:
                print(i/1000000*100 , '%completed.')
        data = data.append({'Open':random.random(), 'High':random.random(), 'Low':random.random(), 'Close':random.random(),'Avg9':random.random()},ignore_index=True)
    
end = datetime.datetime.now()
print(start, end)

提前致谢。

标签: pythonpandasdataframe

解决方案


DataFrame append 很慢,因为它实际上意味着从头开始创建一个全新的 DataFrame。

如果您只是想优化上面的代码,您可以将所有行追加到列表而不是 DataFrame(因为追加到列表很快)然后在循环外创建 DataFrame - 传递数据列表。

同样,如果您需要组合许多 DataFrame,通过一次调用 pd.concat 而不是多次调用 DataFrame.append 最快。


推荐阅读