使用每一次循环来进行腌制和加载pandas dataframe以保存进度...是个坏主意吗?

2024-04-19 21:28:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个for循环,它对数千行执行API调用。你知道吗

(我知道不建议使用for循环,但是这个api有速率限制,所以慢一点更好。我知道我也可以做iterrows,但这只是一个例子)

有时我回来发现循环失败了,或者api出了问题,我需要停止循环。这意味着我丢失了所有的数据。你知道吗

我在考虑在每个循环结束时对数据帧进行酸洗,并在开始时重新加载它。这将保存对数据帧的所有更新。你知道吗

假例子(不是工作代码-这只是一个'what if'):


for i in range(len(df1)):

    # check if df pickle file in directory

    if pickle in directory:

        # load file
        df1 = pickle.load(df1)

        # append new data
        df1.loc[i,'api_result'] = requests(http/api/call/data/)

        # dump it to file
        pickle.dump(df1)

    else:
         # start of loop

         # append new data
         df1.loc[i,'api_result'] = requests(http/api/call/data/)

         # dump to file
         pickle.dump(df1)

如果这不是保存更新文件以防失败或提前停止的好方法,那是什么?你知道吗


Tags: 数据inapinewfordataifload
1条回答
网友
1楼 · 发布于 2024-04-19 21:28:43

我认为一个好的解决方案是将所有的更新都保存在一个文件中

with open("updates.txt", "a") as f_o:
    for i in range(len(df1)):
        # append new data
        f_o.write(requests(http/api/call/data/)+"\n")

如果文件中存在所有行,则可以进行批量更新。如果没有,则从上次失败的记录重新启动更新

相关问题 更多 >