我已经创建了一个函数,该函数调用我们的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还是比较陌生的-真的很喜欢它的范围,但是我在循环方面有点挣扎!
答案 0 :(得分:0)
对range
使用列表理解:
df = pd.concat([customers(i) for i in range(1, pages + 1)], as_index=False)