【Day05-遍历】不要再只会用for回圈了,你值得拥有更好的选择-apply

第三天我们简单介绍了处理表格的pandas套件
接下来就要开始对资料进行处理了
我们都知道电脑比起人类来说,最大的优势就是可以快速的执行相同的操作
因此学会如何对大笔大笔的资料进行重复的操作就是非常关键的了

对程序有过一些经验初学资料的朋友们可能会想到
「啊不就回圈吗,这有什麽特别的吗?」
基本上这样的想法,对 但也不完全正确

python作为一门没有那麽底层的语言
相对上它的执行效率是远不如那些C/C++之类的
其中日常影响最最大的部分就是我们亲爱的for回圈啦
因此,如果你真的要对资料进行操作的时候
一定要尽量的避免把所有的操作都用for来完成

以下例子我们用经典的鸢尾花(iris)资料集为例

import pandas as pd
df = pd.read_csv("iris.csv")

为了要随便有个可以做的事情
我们先以将同一笔资料的class label给print出来

# 印出类别
def foo(row):
    print("The class is %s" % row["class"])

使用for回圈

# 使用for回圈遍历
for index,row in df.iterrows():
    foo(row)

如果你真的坚持要用回圈的方式来处理的话
可以对你的DataFrame呼叫.iterrows(),并且用index,row两个变数去接住它来进行遍历

使用apply

# 使用apply遍历
df.apply(foo, axis = 1)

这边我们稍微做一下解释

当我们对一个DataFrame进行apply操作的时候会需要给它一个方向axis

  • 0表示按col依序进行处理
  • 1表示按row依序进行处理

而处理的过程则可以想像成每次被遍历的对象作为参数,被後面接着的foo()函数进行处理

比较时间

这边为了要让结果明显一点
我将资料进行了重复采样到50000笔之後分别用两种方法进行操作
得出的结果如下

  • 使用for
  • 使用apply

这边要注意这还只是最简单的一个print而已
如果处理的内容更加复杂的时候,这差距还会更加显着的拉大
因此,珍爱生命请善用apply


<<:  Day 15 Compose LazyRow

>>:  Day 5 - 回圈及 ++ --运算式

Day08 - 在 Next.js 中使用 pre-rendering (getStaticProps) — Part 2

前言 在前一篇文章中,我们了解了如何使用 getStaticProps 让 Next.js 可以在打...

Day4. 如何寻找设计切入点

在做新产品开发时,对於用户需求收集,寻找产品切入点,我们常有一个典型的错误假设,那就是认为用户最知...

D19 - 彭彭的课程# Python 文字档案的读取和储存(1)

最近看了地狱厨房 觉得好看!!! 里面一堆肉看起来超好吃的XD 今天终於进入汇入档案的部份 连结:h...

Netlify CMS : 完全就是为了 JAMstack 而设计的 CMS 系统

Netlify CMS 完全就是为了 JAMstack 而设计的 CMS 系统 前面分享了直接使用第...

Day7 我想知道它哪里比我好很多 在你心中它和我有什麽不同

JavaScript feature 随着越来越深入JavaScript,现在所考察和学习到的co...