【问题标题】:Python, input rows of pandas data frame, output rows of a different data frame. Run in parallelPython,熊猫数据框的输入行,不同数据框的输出行。并行运行
【发布时间】:2019-07-09 08:01:24
【问题描述】:

我需要一些帮助,开始在 python 中运行一些并行代码。我不认为对于我的问题我可以共享可执行代码,但您仍然可以帮助我从概念上解决我的问题。

我编写了一个函数,该函数将 panda 数据框行作为输入。 该函数进行一些 x 计算,并从具有不同列名作为输入的 panda 数据框中再次返回一行。

到目前为止,我一直在 for 循环中使用它来获取行作为输入,并且在函数返回之后,我将其输出附加到新的数据帧

new_df=pd.DataFrame(columns=['1','2','unique','occurence','timediff','ueid'], dtype='float')

for i in range(0,small_pd.shape[0]): #small_pd the input of the dataframe
    new_df=new_df.append(SequencesExtractTime(small_pd.loc[i]))

现在我有一个问题,我想并行运行此代码。我找到了多处理包。

from joblib import Parallel, delayed
import multiprocessing

num_cores = multiprocessing.cpu_count()

results = Parallel(n_jobs=num_cores)(SequencesExtractTime(small_pd.loc)(i) for i in range(0,small_pd.shape[0]))

但不幸的是,这不会执行,因为我不知道如何声明输入是此数据帧的单独行。

您能帮我了解如何在 python 中实现这种并行化吗?输入是数据框的行,输出是需要合并在一起的数据框的行。

非常感谢

问候

亚历克斯

【问题讨论】:

  • 为什么选择多处理?你在用 SequencesExtractTime 做什么,small_pd 中有什么?如果您可以分享这些信息,也许除了多处理之外还有其他方法可以解决您的问题?

标签: python pandas dataframe parallel-processing


【解决方案1】:

您可以在 Python 多处理中使用 Pool 对象。

import multiprocessing as mp
num_workers = mp.cpu_count()  
pool = mp.Pool(num_workers)
results_pool = []
for i in range(0,small_pd.shape[0]):    
results_pool.append(pool.apply_async(SequencesExtractTime,args=(i)))
pool.close()
pool.join()
multi_results = [r.get() for r in results_pool]
print (multi_results)

【讨论】:

  • 非常感谢。我目前在数据框的一小部分上使用它来习惯。不清楚的是如何获得输出。这是我从代码池 Out[132]: results_pool Out[133]: [, , ]
  • 我已经编辑了答案。 ‘ multi_results = [r.get() for r in results_pool] ‘ , multi_results 将包含所有结果。
  • 看到了,谢谢。 TypeError: 'int' object is not subscriptable from the r.get() 这可能是我调用函数的方式,实际上它需要两个参数?对于范围内的 i(0,small_pd.shape[0]): results_pool.append(pool.apply_async(SequencesExtractTime,args=(i,listOfUePatterns))) pool.close() pool.join() multi_results = [r.get () for r in results_pool]
  • 我认为,问题出在函数的返回类型上。你能告诉我这个'for r in results_pool: print (r.to_string())的结果吗
  • 我能够像这样运行代码 results_pool.append(pool.apply_async(SequencesExtractTime,kwds={'seqInput':small_pd.iloc[i]}))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 2020-08-21
  • 2019-01-25
  • 2021-10-06
  • 2019-05-01
相关资源
最近更新 更多