網頁

2024年4月15日 星期一

Python:五種Dataframe循環效率比較

下面是一個身高體重的DataFrame,資料共有10萬筆:

 

如果要計算每一筆的BMI並增加BMI欄位, 有幾種做法呢? 還有哪一種最快或最慢呢?

首先 BMI 公式是:體重/(身高*身高)

方法1:使用Numpy 向量計算,這方法是將Pandas的數據轉化為Numpy的Array,然後使用Numpy的內置函數進行向量化操作。10萬筆資料大約0.0020sec

方法2:DataFrame 向量計算。10萬筆資料大約0.00350sec

方法3:使用apply函數,用法是接一個 lambda匿名函數,從而對dataframe的每一行都進行循環處理。10萬筆資料大約1.02239sec

方法4:也是 apply,但 lambda傳入2個參數。10萬筆資料大約1.03280sec

方法5:是最笨的方式也是最簡單的方式 for loop,跑一個迴圈依序對10萬筆資料循序處理,將結果填入對應的行列中。10萬筆資料大約18.22036sec

結果蠻出乎我意料的,
for loop(最慢) >> apply lambda >> DataFrame Vector >> Numpy(最快)
我以為向量或lambda會最快,沒想到Numpy的函數最快。

輸出結果:




 








沒有留言:

張貼留言