成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Pandas中Apply函數(shù)加速百倍的技巧

開發(fā) 后端
pandas的許多問題我們都需要使用apply函數(shù)來進行處理,而apply函數(shù)是非常慢的,本文我們就介紹如何加速apply函數(shù)600倍的技巧。

[ 引言 ] 雖然目前dask,cudf等包的出現(xiàn),使得我們的數(shù)據(jù)處理大大得到了加速,但是并不是每個人都有比較好的gpu,非常多的朋友仍然還在使用pandas工具包,但有時候真的很無奈。

實驗對比

1. Apply(Baseline)

我們以Apply為例,原始的Apply函數(shù)處理下面這個問題,需要18.4s的時間。

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.randint(0, 11, size=(1000000, 5)), columns=('a','b','c','d','e'))
def func(a,b,c,d,e):
if e == 10:
return c*d
elif (e < 10) and (e>=5):
return c+d
elif e < 5:
return a+b
%%time
df['new'] = df.apply(lambda x: func(x['a'], x['b'], x['c'], x['d'], x['e']), axis=1)
CPU times: user 17.9 s, sys: 301 ms, total: 18.2 s
Wall time: 18.4 s

2. Swift加速

因為處理是并行的,所以我們可以使用Swift進行加速,在使用Swift之后,相同的操作在我的機器上可以提升到7.67s。

%%time
# !pip install swifter
import swifter
df['new'] = df.swifter.apply(lambda x : func(x['a'],x['b'],x['c'],x['d'],x['e']),axis=1)
HBox(children=(HTML(value='Dask Apply'), FloatProgress(value=0.0, max=16.0), HTML(value='')))
CPU times: user 329 ms, sys: 240 ms, total: 569 ms
Wall time: 7.67 s

3. 向量化

使用Pandas和Numpy的最快方法是將函數(shù)向量化。如果我們的操作是可以直接向量化的話,那么我們就盡可能的避免使用:

  • for循環(huán);
  • 列表處理;
  • apply等操作

在將上面的問題轉化為下面的處理之后,我們的時間縮短為:421 ms。

%%time
df['new'] = df['c'] * df['d'] #default case e = =10
mask = df['e'] < 10
df.loc[mask,'new'] = df['c'] + df['d']
mask = df['e'] < 5
df.loc[mask,'new'] = df['a'] + df['b']
CPU times: user 134 ms, sys: 149 ms, total: 283 ms
Wall time: 421 ms

4. 類別轉化+向量化

我們先將上面的類別轉化為int16型,再進行相同的向量化操作,發(fā)現(xiàn)時間縮短為:116 ms。

for col in ('a','b','c','d'):
df[col] = df[col].astype(np.int16)
%%time
df['new'] = df['c'] * df['d'] #default case e = =10
mask = df['e'] < 10
df.loc[mask,'new'] = df['c'] + df['d']
mask = df['e'] < 5
df.loc[mask,'new'] = df['a'] + df['b']
CPU times: user 71.3 ms, sys: 42.5 ms, total: 114 ms
Wall time: 116 ms

5. 轉化為values處理

在能轉化為.values的地方盡可能轉化為.values,再進行操作。

  • 此處先轉化為.values等價于轉化為numpy,這樣我們的向量化操作會更加快捷。

于是,上面的操作時間又被縮短為:74.9ms。

%%time
df['new'] = df['c'].values * df['d'].values #default case e = =10
mask = df['e'].values < 10
df.loc[mask,'new'] = df['c'] + df['d']
mask = df['e'].values < 5
df.loc[mask,'new'] = df['a'] + df['b']
CPU times: user 64.5 ms, sys: 12.5 ms, total: 77 ms
Wall time: 74.9 ms

實驗匯總

通過上面的一些小的技巧,我們將簡單的Apply函數(shù)加速了幾百倍,具體的:

  • Apply: 18.4 s
  • Apply + Swifter: 7.67 s
  • Pandas vectorizatoin: 421 ms
  • Pandas vectorization + data types: 116 ms
  • Pandas vectorization + values + data types: 74.9ms
責任編輯:龐桂玉 來源: 小詹學Python
相關推薦

2020-08-30 14:29:01

Pandas數(shù)據(jù)分析函數(shù)

2012-11-15 09:46:22

Xeon PhiIntel加速性能

2023-04-14 07:09:04

2023-02-22 14:47:24

模型AI

2025-05-12 08:50:00

apply()Pandas函數(shù)

2012-11-21 17:35:21

Oracle技術嘉年華

2016-03-04 14:40:35

華為

2019-12-25 14:08:50

Pandas數(shù)據(jù)計算

2015-09-24 10:18:54

程序員身價

2015-03-12 10:21:05

阿里云宕機

2022-09-20 10:50:34

PandasNumPy

2024-11-26 15:00:00

語言模型AI

2014-11-11 15:57:07

2023-06-26 22:15:14

ChatGPT思維模型

2024-08-01 08:06:11

虛擬線程性能

2021-12-29 10:26:58

芯片半導體技術

2019-06-14 08:28:32

SQL數(shù)據(jù)庫語句

2019-06-17 10:23:18

戴爾

2023-05-31 07:24:48

2018-12-10 11:00:01

MySQL數(shù)據(jù)庫索引
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品免费看 | 国产精品久久久久久久免费大片 | 免费久久视频 | 国产精品观看 | 欧美精品欧美精品系列 | 日本精品一区二区三区在线观看视频 | 男女污污动态图 | 超碰日本 | 国产日韩欧美一区二区在线播放 | 色综合色综合色综合 | 丝袜毛片| 国产高清在线观看 | 亚洲视频在线观看免费 | 欧美国产日韩在线 | 日日干日日操 | 午夜精品在线 | 欧美在线一区二区三区 | 日韩视频区 | 狠狠操狠狠操 | 国产成人福利在线 | 91久久久久久久 | 日韩二区| 久久影音先锋 | 国产精品高清在线 | 日韩在线观看视频一区 | 欧美日韩在线播放 | 日韩高清中文字幕 | 久久久精| 色欧美片视频在线观看 | 亚洲精品久久久久中文字幕欢迎你 | 91精品国产综合久久久久久蜜臀 | 久久网站黄 | 久久久久久久久蜜桃 | 99免费精品| 国产成都精品91一区二区三 | 99re视频在线免费观看 | 久久久亚洲综合 | 中文字幕视频在线免费 | 日本成人中文字幕 | 久久aⅴ乱码一区二区三区 91综合网 | 日本一区二区高清不卡 |