iT邦幫忙

2021 iThome 鐵人賽

DAY 5
0
AI & Data

資料三十-那些最基本的資料處理與分析技能系列 第 5

【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


上一篇
【Day04-檔案】你知道Excel最大可以開多少筆資料嗎?
下一篇
【Day06-合併】發動魔法卡,融合——在python中如何合併list, dict, set, np.array, pd.DataFrame?
系列文
資料三十-那些最基本的資料處理與分析技能30

尚未有邦友留言

立即登入留言