python - 在每个循环中酸洗和加载 pandas 数据框以保存进度……坏主意?

标签 python pandas

我有一个 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/

相关文章:

python - 如何对字典进行排序?

python - 根据另一列中的值减去选择一列中的值

python - 是否有用于 python 的数据库测试工具(如 sqlunit)?

Python:使用函数从 csv 文件中读取行并从这些行中提取数据

python - Pandas:前 N 个以及剩余的总数。这对于每个组

python - 长/宽数据到宽/长

python - 引用 pandas 列的属性与字典表示法

python - 隐式方程和 Mayavi

python - Matplotlib 不在图表上显示日期

python - for循环并在Python中添加额外的列groupby pandas dataframe