优化Pandas批量执行SQL生成DataFrame并合并的性能问题
性能优化求助:批量日期SQL查询的Pandas性能瓶颈
需求背景
- 现有一个名为
s_dates的pandas.Series业务日期序列,需将每个日期与超参数传入func_sql_to_df函数(该函数负责构建SQL查询并返回pandas.DataFrame),最终合并为带业务日期标识的df_summary - 后续需完成两项操作:
- 将
df_summary导出至Excel或CSV文件 - 按日期分组后对各列应用
func_analysis函数
- 将
当前实现代码
df_summary = pd.concat(list( s_dates.apply(func_sql_to_df, args=hyper_param) )) df_summary.groupby('dates').apply(func_analysis) # 导出数据 ...
问题现状
- 共250个日期,
df_summary的构建步骤耗时异常:前几次迭代约3秒,执行100次后单次迭代耗时增至3分钟以上且持续变长 - 单独执行每个SQL查询耗时稳定(2-8秒),且每个查询返回的DataFrame行数一致
- 已采用
apply替代普通循环,且SQL语句已做大幅优化,现寻求性能提升方案
更新补充
更新1
当前实现方式与Stack Overflow某高赞推荐方案一致
更新2
提供使用的SQL查询语句,不确定是否可以一次性传入所有日期,因为WHERE子句中的条件需要对每个传入的日期单独生效:
select /*+ parallel(auto) */ MY_DATE as EOD_DATE -- 对应传入的'dates'中的元素 , Var2 , Var3 , ColA , ColB , ... , ColN from Database1 where Var2 in (select Var2 from Datebase2 where update_time < MY_DATE) -- Cond1 and Var3 in (select Var3 from DataBase3 where EOD_DATE = MY_DATE) -- Cond2 and cond3 and cond4 ...
内容的提问来源于stack exchange,提问作者Landscape
相关产品推荐
相关产品推荐

