【问题标题】:Efficiency of pandas dataframe append熊猫数据框追加的效率
【发布时间】:2021-12-16 19:04:40
【问题描述】:

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

这是我的代码,执行时间超过 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)

提前致谢。

【问题讨论】:

  • 这能回答你的问题吗? Python - Efficient way to add rows to dataframe
  • append 的缓慢是您在使用DataFrames 时通常会偶然发现的。您能否澄清一下您是否真的需要逐行追加,或者您是否真的有完整的数据集可用,因此可以一次性创建整个 df?
  • 嗨,Kosmos,感谢回复,是的,我需要逐行添加数据,因为我一开始没有完整的数据集,所有数据都来自其他数据源,所以我不能一次创建一个完整的数据框。
  • HI,Mahrkeenerh,答案很有帮助,我试过df.loc方法,比df好。 append 但仍然感觉很慢,比我使用 df.iloc 搜索数据还要糟糕。也许这个问题没有更好的解决方案。谢谢。

标签: python pandas dataframe


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2016-07-21
    • 2020-04-21
    • 1970-01-01
    • 2018-11-05
    • 2020-08-10
    • 2018-06-26
    • 2017-02-21
    • 2016-05-20
    相关资源
    最近更新 更多