python - 函数的迭代循环
问题描述
我创建了一个函数,它调用我们的 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 比较陌生 - 真的很喜欢它的范围,但我对循环有点挣扎!
解决方案
使用列表推导range
:
df = pd.concat([customers(i) for i in range(1, pages + 1)], as_index=False)
推荐阅读
- java - 如何从 EDT 向长期运行的 SwingWorker 传递对象?
- python - AWS Elastic Beanstalk Python Django S3 Access Denied 无法上传/读取文件
- javascript - 用 Visual Studio JavaScript 分离 .send 和 .ban(异步)?
- matlab - 在 Matlab 中围绕 x 或 y 轴旋转图像
- spring - Spring Integration - SftpPersistentAcceptOnceFileListFilter 过滤掉新文件/修改过的文件
- javascript - 如何在 Bootstrap 5 中使用 popperjs 使下拉菜单工作
- gradle-kotlin-dsl - 分组 gradle 依赖项
- swift - 在 Xcode 上运行单元测试时出现非法指令 4 错误
- apache-spark - 在 Spark 中删除重复函数使用后跟自联接计数
- swift - SpriteKit 纹理图集导致图像伪影和空白区域