Python 在每个循环中酸洗并加载一个数据帧以保存进度…坏主意?

Python 在每个循环中酸洗并加载一个数据帧以保存进度…坏主意?,python,pandas,Python,Pandas,我有一个for循环,它对数千行执行API调用 (我知道不建议使用for循环,但此api有速率限制,因此速度较慢更好。我知道我也可以执行iterrows,但这只是一个示例) 有时我回来发现循环失败了,或者api有问题,我需要停止循环。这意味着我丢失了所有数据 我正在考虑在每个循环的末尾对数据帧进行酸洗,并在开始时重新加载它。这将保存对数据帧的所有更新 假示例(非工作代码-这只是一个'what if'): 如果这不是在出现故障或提前停止时保存更新文件的好方法,那是什么呢?我认为一个好的解决方案是将所

我有一个for循环,它对数千行执行API调用

(我知道不建议使用for循环,但此api有速率限制,因此速度较慢更好。我知道我也可以执行
iterrows
,但这只是一个示例)

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

我正在考虑在每个循环的末尾对数据帧进行酸洗,并在开始时重新加载它。这将保存对数据帧的所有更新

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


如果这不是在出现故障或提前停止时保存更新文件的好方法,那是什么呢?

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

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")

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

我认为更适合,因为您可以追加。此时,最好从每次迭代读取的位置写回数据帧,而不是序列化itHard,但如果api请求失败或挂起,不是更好地隔离api请求,你可以在不失去任何东西的情况下恢复吗?@Nikaidoh你到底是什么意思?你能再解释一下吗?写回数据帧是什么意思?你能在回答中做一个假例子吗?@wwii我如何将api请求与数据帧分离。它实际上取决于数据帧中的数据。我想我应该说得更清楚。来自每一行的数据将进入http request.no@juanpa.arrivillaga,他在每次迭代时都序列化所有数据帧,这是计算开销,因此我将有一个包含所有api结果的文本文件。但是我是否也应该保存行的索引?因此,我确切地知道在哪里更新原始数据帧,这是无关紧要的。因为他们自己有这个信息。如果您的脚本在第322行停止编写,那么您的最后一个索引是322,例如对不起,我在页面顶部也问了您一个问题,不知道您已经回答了。
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")