下面是一個身高體重的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的函數最快。
輸出結果:
沒有留言:
張貼留言