pandas dataFrame之基于numpy向量化加速

一、使用numpy加速dataFrame索引,从dataFrame中抽取需要的数据:

当dataFrame太大时,pandas索引(如 df[df['age'] == 30)的速度较慢。可以用向量化方法进行加速。

一个例子如下,其作用是从data_df中抽取需要的imei的数据:

imei_list = list(set(data_df['imei']))

tt = data_df.values

#分别得到data_df第1~4列的数据
imei_col_data = tt[:,0]
lng_col_data = tt[:,1]
lat_col_data = tt[:,2]
tmstp_col_data = tt[:,3]

#指定一个imei,并找到和它相关的时间戳和经纬度
sel_imei = imei_list[i]
index = np.where(imei_col_data == sel_imei)  
lng_list = lng_col_data[index]
lat_list = lat_col_data[index]
tmstp_list = tmstp_col_data[index]

其中data_df的四列分别为imei,经度,纬度,时间戳。这个例子的作用相当于

sel_data = data_df[data_df['imei'] == sel_imei]
lng_list = list(sel_data['lng'])
lat_list = list(sel_data['lat'])
tmstp_list = list(sel_data['tmstp'])

至此已经提取出了相关的数据,这时进行相关的处理即可。

二、使用apply_along_axis替代apply,加速数值型apply的计算

import time
import pandas as pd
import numpy as np
 
df=pd.DataFrame(np.arange(8000000).reshape(2000000,4),columns=list('abcd'))
t1=time.time()
s1=df.apply(lambda x:x['a']+x['d'],axis=1)
t2=time.time()
print(t2-t1)
arr=df.values
t3=time.time()
s=np.apply_along_axis(lambda x:x[0]+x[3],axis=1,arr=arr)
t4=time.time()
print(t4-t3)
# output:
#18.062725067138672
#3.8327248096466064

可见,使用这种方法,计算时间从18s减少到3.83s,大大提升了执行速度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值