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飞起来!


版权声明:本文为chandelierds原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。