函数上的迭代循环

时间:2018-10-24 08:59:25

标签: python pandas for-loop erp

我已经创建了一个函数,该函数调用我们的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还是比较陌生的-真的很喜欢它的范围,但是我在循环方面有点挣扎!

1 个答案:

答案 0 :(得分:0)

range使用列表理解:

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