Цель: Выполнить многопоточное / многопоточное извлечение данных для создания кадров данных и объединить их для создания одного окончательного кадра данных.
Вот что я пытаюсь:
# List of parms to pull data for
itera = [1,2,3,4,5]
# Method to multithread/multiprocess
def sql_pull(i):
# Create empty list (Intention is that data pulls will reside in this list as dataframes)
df_list = []
# Set the parameter to use in the SQL Query
sparm['parm'] = itera[i][0]
try:
# Execute the pull for parameter and append dataframes into the list
query= """
SELECT * from table where ID = :parm
"""
df_list.append(pd.read_sql(query, con=connection, params=sparm))
print(type(df_list)) ## <class 'list'>
print(type(df_list[0])) ## <class 'pandas.core.frame.DataFrame'>
return df_list
except Exception:
sys.exit(1)
if __name__ == '__main__':
# Fix the number of cores
pool = Pool(5)
# Start multiprocessing/multithreading
emap = pool.map(sql_pull, range(len(itera)))
print(type(emap)) ## <class 'list'>
print(type(emap[0])) ## <class 'list'>
# Consolidate Dataframes
final = pd.concat(emap)
Со следующей ошибкой:
Traceback (most recent call last):
File "code.py", line 213, in <module>
final = pd.concat(emap)
File "/pandas/core/reshape/concat.py", line 228, in concat
copy=copy, sort=sort)
File "/pandas/core/reshape/concat.py", line 289, in __init__
raise TypeError(msg)
TypeError: cannot concatenate object of type "<class 'list'>"; only pd.Series, pd.DataFrame, and pd.Panel (deprecated) objs are valid
Что я делаю не так, и любые идеи, чтобы это исправить, будут высоко оценены.