详细内容或原文请订阅后点击阅览
为什么你应该停止在 Pandas 中编写循环
如何以列方式思考,编写更快的代码,并最终像专业人士一样使用 Pandas 为什么你应该停止在 Pandas 中编写循环一文首先出现在 Towards Data Science 上。
来源:走向数据科学:当我第一次开始使用 Pandas 时,我一直写这样的循环:
for i in range(len(df)):
如果 df.loc[i, "销售额"] > 1000:
df.loc[i, "层"] = "高"其他:
df.loc[i, "tier"] = "低"
成功了。我想,
“嘿,没关系,对吧?”
事实证明……没那么多。
我当时没有意识到,但像这样的循环是一个典型的初学者陷阱。它们让 Pandas 做比实际需要更多的工作,并且它们潜入了一种心理模型,让你逐行思考,而不是逐列思考。
一旦我开始以列的形式思考,事情就发生了变化。代码变短了。执行速度变得更快。突然间,Pandas 感觉它实际上是为了帮助我而构建的,而不是让我放慢脚步。
为了展示这一点,让我们使用一个我们将在全文中引用的小数据集:
将 pandas 导入为 pd
df = pd.DataFrame({
“产品”:[“A”,“B”,“C”,“D”,“E”],
“销售额”:[500, 1200, 800, 2000, 300]
})
输出:
产品销售
0 500
1B 1200
2C 800
3D 2000
4 E 300
我们的目标很简单:如果销售额大于 1000,则将每一行标记为高,否则标记为低。
让我向您展示我最初是如何做到的,以及为什么有更好的方法。
我开始使用的循环方法
这是我学习时使用的循环:for i in range(len(df)):如果 df.loc[i, "销售额"] > 1000:df.loc[i, "层"] = "高"其他:df.loc[i, "层"] = "低"打印(df)它产生这样的结果:产品销售层级0 500 低1B 1200高2℃ 800 低3D 2000高4 E 300 低是的,它有效。但这是我通过惨痛教训学到的:Pandas 对每一行执行一个微小的操作,而不是一次有效地处理整个列。这种方法无法扩展 — 5 行时感觉良好,但 50,000 行时会变慢。更重要的是,它让你像初学者一样思考 — 逐行 — 而不是像专业的 Pandas 用户一样思考。为循环计时(我意识到它很慢的那一刻)当我第一次在这个小数据集上运行循环时,我想,“没问题,它足够快了。”但后来我想知道……如果我有一个更大的数据集怎么办?所以我尝试了:这是我得到的:循环时间:129.27328729629517循环版本:
