python - 熊猫数据框追加的效率
问题描述
我发现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)
提前致谢。
解决方案
DataFrame append 很慢,因为它实际上意味着从头开始创建一个全新的 DataFrame。
如果您只是想优化上面的代码,您可以将所有行追加到列表而不是 DataFrame(因为追加到列表很快)然后在循环外创建 DataFrame - 传递数据列表。
同样,如果您需要组合许多 DataFrame,通过一次调用 pd.concat 而不是多次调用 DataFrame.append 最快。