pd.append() 是连接两个数据框的最快方法吗?

Is pd.append() the quickest way to join two dataframes?

我正在对 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 行中出现的所有重复项。

当你有多个连续追加时,创建数据帧列表并在最后连接它通常比在每次迭代时使用 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 s ± 88.5 ms(7 次运行的平均值 ± 标准偏差,每次 1 个循环) 其中相同的实现但在每次迭代中使用 append 给出 每个循环 2.81 秒 ± 126 毫秒(7 次运行的平均值 ± 标准偏差,每次 1 个循环)