0

I have created a function which calls our ERP API to recall customer data to place it in a database for further analysis & integration with external tools (ie MailChimp). The API returns 100 records per page and I need help with creating an iterative loop that allows the function to run x number of times as desired. I have two functions. The first one finds out the number of pages in the data call:

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

The second is the call itself:

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

I have then created a rather crude if statement which does the job where the number of records is < 6000 but if I want to grab the full dataset (65000) then this loop will be really inefficient plus it isn't scaleable for future demands.

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

How can I make this loop smart / iterative so that it runs x number of times and returns the results as appended single dataframe? I am relatively new with Python - really loving the scope of it but I struggle with loops a bit!

lmonty
  • 187
  • 8

1 Answers1

0

Use list comprehension with range:

df = pd.concat([customers(i) for i in range(1, pages + 1)], as_index=False)
jezrael
  • 822,522
  • 95
  • 1,334
  • 1,252