Pandas优化加速小技巧

【场景】

使用Pandas对DataFrame数据根据某个维度进行操作:如统计query列的所有取值,循环筛选这些取值的样本进行操作

【问题1】

循环筛选符合条件的样本,使用df[df['query']=='query_1']非常耗时

【解决】、

使用了

index = df.query.isin(['query1'])
df.loc[index, :]

相比最开始的耗时降低了一半多,但所有循环加在一起还是慢,因此采用了如下方法:

使用词典结构,将同一query下的样本index放入list中,如query_idx = {"query_1":[1,3,10],...}
在筛选为query_1的样本时,直接使用df.iloc[query_idx['query_1'], :]进行筛选,由于使用哈希表的搜索操作,4700万数据的运行时长由300+小时降为2小时之内

【问题2】

dataframe使用append循环写入随着循环数增加而越来越耗时

【解决】

先把每个循环中的数据放入list,最后再append进DataFrame中
伪代码:

list_per_iter = []
res = pd.DataFrame()
每次循环:
    list_per_iter.append(每次的datafram结构数据)
res.append(df_per_iter)

最终4700万数据的运行时间:
在这里插入图片描述

参考链接

几个方法帮你加快Python运行速度
还在抱怨pandas运行速度慢?这几个方法会颠覆你的看法
提速千倍!Pandas性能优化方法,让你的pandas飞起来!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值