Pandas 矢量化
Pandas vectorization
在我的 python 脚本中,我需要对同一数据库中相似(但不相关)的表执行一系列 sql 查询。每个 select 的输出列始终相同。有没有办法执行此异步操作以减少处理时间?
tables = pd.DataFrame(['Table1, Table2, Table3'], columns=['Table Name'])
sqlQuery1 = '''select a, b, c from TABLENAME'''
sqlDataLst = []
for i, row in tables.iterrows():
sqlQuery1_exe= sqlQuery1.replace("TABLENAME",row['Table Name'])
sqlData = pd.read_sql_query(sqlQuery1_exe,getConn())
sqlDataLst.append(sqlData)
sqlDataAll = pd.concat(sqlDataLst)
您可以使用多线程。定义一个新函数(我们称之为 new_function
),它获取 table 名称作为参数,然后运行 read_sql_query
.
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=10) as executor:
for i, row in tables.iterrows():
future = executor.submit(new_function, row['Table Name'])
注意:当您在 python 中使用多线程时,您应该了解 GIL(Pandas 开发人员对此要小心)
在我的 python 脚本中,我需要对同一数据库中相似(但不相关)的表执行一系列 sql 查询。每个 select 的输出列始终相同。有没有办法执行此异步操作以减少处理时间?
tables = pd.DataFrame(['Table1, Table2, Table3'], columns=['Table Name'])
sqlQuery1 = '''select a, b, c from TABLENAME'''
sqlDataLst = []
for i, row in tables.iterrows():
sqlQuery1_exe= sqlQuery1.replace("TABLENAME",row['Table Name'])
sqlData = pd.read_sql_query(sqlQuery1_exe,getConn())
sqlDataLst.append(sqlData)
sqlDataAll = pd.concat(sqlDataLst)
您可以使用多线程。定义一个新函数(我们称之为 new_function
),它获取 table 名称作为参数,然后运行 read_sql_query
.
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=10) as executor:
for i, row in tables.iterrows():
future = executor.submit(new_function, row['Table Name'])
注意:当您在 python 中使用多线程时,您应该了解 GIL(Pandas 开发人员对此要小心)