当前位置: 首页 > 知识库问答 >
问题:

pd.append()是连接两个数据帧的最快方法吗?[复制]

许承悦
2023-03-14

我正在通过API分页,并将请求保存到数据帧。

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

我担心这是因为一旦我达到100000行以上,添加下一个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行中出现的任何重复项。

共有1个答案

郗丰
2023-03-14

当多个附件串联在一起时,创建一个数据帧列表并在末尾将其连接起来通常比使用pd更有效。在每次迭代时追加函数,因为这些函数有一些开销。

例如

%%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 s±126 ms(7次运行的平均值±标准偏差,每个循环1次)

 类似资料:
  • 我有两个数据帧和包含IP地址,我正在尝试将IP地址映射到地理位置信息,如经度和纬度,它们是中的列。 我运行它作为一个火花提交作业,但操作花了很长时间,即使只有不到2500行。 我的代码: 有没有其他方法可以加入这两张桌子?还是我做错了?

  • 假设我有两个数据帧,具有不同级别的信息,如下所示: 我想加入df1和df2,并将“值”信息传递给df2:一天中的每一小时都将获得“日”值。 预期产出:

  • 问题内容: 用Java连接两个String的最快方法是什么? 即 我在中使用它作为键,并且在一个非常紧密的循环中调用它来检索值。 当我分析时,这就是瓶颈 问题答案: 这些例程出现在基准测试中的原因是因为这是编译器在幕后实施“ +”的方式。 如果您确实需要连接的字符串,则应让编译器以“ +”号表示神奇。如果你都需要对地图查找一个键,一键类控股与合适的两个字符串,并因为它避免了复制步骤的实现可能是一个

  • 我正在尝试将两个PySpark数据帧与仅位于其中一个上的列连接起来: 现在我想生成第三个数据帧。我想要像熊猫这样的东西: 这可能吗?

  • 我需要将两个数据帧和一个接一个地连接起来,它们具有相同的行数(),而不考虑任何键。此函数类似于