作者:linjiabin43 | 来源:互联网 | 2023-10-11 16:05
【场景】
使用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飞起来!