首页 > 解决方案 > 函数的迭代循环

问题描述

我创建了一个函数,它调用我们的 ERP API 来调用客户数据并将其放入数据库中,以便进一步分析和与外部工具(即 MailChimp)集成。API 每页返回 100 条记录,我需要帮助创建一个允许函数根据需要运行 x 次的迭代循环。我有两个功能。第一个找出数据调用中的页数:

def pages():
    df = Erply.getCustomers(createdUnixTimeFrom=start,
                            createdUnixTimeTo=end,
                            recordsOnPage=100)
    count = df.total
    pages = int(round(count / 100) + 1)
    return pages

第二个是调用本身:

def customers(page):
    df = Erply.getCustomers(createdUnixTimeFrom=start,
                            createdUnixTimeTo=end,
                            recordsOnPage=100,
                            pageNo=page)
    df = df.records
    df = df[0]
    table = pd.DataFrame.from_dict(df)
    return table

然后我创建了一个相当粗略的 if 语句,它可以完成记录数 < 6000 的工作,但是如果我想获取完整的数据集(65000),那么这个循环将非常低效,而且它对于未来的需求是不可扩展的。

pages = pages()

if pages == 1:
    df = customers(1)
elif pages == 2:
    df1 = customers(1)
    df2 = customers(2)
    dfs = [df1, df2]
    df = pd.concat(dfs)
elif pages == 3:
    df1 = customers(1)
    df2 = customers(2)
    df3 = customers(3)
    dfs = [df1, df2, df3]
    df = pd.concat(dfs)
elif pages == 4:
    df1 = customers(1)
    df2 = customers(2)
    df3 = customers(3)
    df4 = customers(4)
    dfs = [df1, df2, df3, df4]
    df = pd.concat(dfs)
elif pages == 5:
    df1 = customers(1)
    df2 = customers(2)
    df3 = customers(3)
    df4 = customers(4)
    df5 = customers(5)
    dfs = [df1, df2, df3, df4, df5]
    df = pd.concat(dfs)

df = df.reset_index()
return df

如何使这个循环智能/迭代,以便它运行 x 次并将结果作为附加的单个数据帧返回?我对 Python 比较陌生 - 真的很喜欢它的范围,但我对循环有点挣扎!

标签: pythonpandasfor-looperp

解决方案


使用列表推导range

df = pd.concat([customers(i) for i in range(1, pages + 1)], as_index=False)

推荐阅读