我有一个 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)
如果这不是在发生故障或提前停止时保留更新文件的好方法,那什么才是?
最佳答案
我认为一个好的解决方案是将所有更新保存在一个文件中
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")
如果所有行都存在于文件中,您可以进行批量更新。如果不是,则从上次失败的记录重新开始更新
关于python - 在每个循环中酸洗和加载 pandas 数据框以保存进度……坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57925362/