pd.append()是将两个数据帧连接起来的最快方法吗?

13 浏览
0 Comments

pd.append()是将两个数据帧连接起来的最快方法吗?

这个问题已经有了答案:

在循环中生成 Pandas 数据框并附加

创建一个空的 Pandas 数据框,然后填充它

Pandas 数据框的 concat 与 append

我正在通过 API 进行分页,并且将请求存储到数据框中。

我可以一次收集 100 行,这个循环目前运行时间超过一小时。

我担心当我达到超过 100,000 行时,附加下一个 100 将变得非常低效。

这是我目前的代码:

while JSONContent['next'][0:10]>unixtime_yesterday:
    try:
        url=...
        JSONContent = requests.request("GET", url).json()
        temp_df=json_normalize(JSONContent['data'])
        temp_df=temp_df[['email','datetime','Campaign Name']]
        temp_df.drop_duplicates(subset=['email','Campaign Name'], keep='last', inplace=True, ignore_index=True)
        df_received=df_received.append(temp_df,ignore_index=True,sort=False)
    except ValueError: 
        print('There was a JSONDecodeError')

为了使这尽可能有效率,我只保留了整个请求中的 3 列。我也删除了 100 行中出现的任何重复项。

admin 更改状态以发布 2023年5月25日
0
0 Comments

当您需要连续多次添加时,更有效的方法通常是创建一个数据框列表,并在最后连接它,而不是在每个迭代中使用pd.append函数,因为pandas函数有一些开销。

例如,

%%timeit
dfs= []
for i in range(10000):
    tmp1 = pd.DataFrame([[1,2,3],[1,2,3],[1,2,3]])
    dfs.append(tmp1)
pd.concat(dfs)

每次循环需要1.44秒±88.5毫秒 (7次运行的平均值±标准差,每次循环1次)
而使用每次迭代时使用的append实现相同,需要2.81秒±126毫秒 (7次运行的平均值±标准差,每次循环1次)

0