Python 如何使用多处理将.apply()用于数据帧?
我有一个函数,我想并行应用于熊猫数据帧Python 如何使用多处理将.apply()用于数据帧?,python,pandas,multiprocessing,Python,Pandas,Multiprocessing,我有一个函数,我想并行应用于熊猫数据帧 import multiprocessing from multiprocessing import Pool from collections import Counter import numpy as np def func1(): # do some operations in serial return word_vector_matrix # a numpy ndarray def get_vector(text):
import multiprocessing
from multiprocessing import Pool
from collections import Counter
import numpy as np
def func1():
# do some operations in serial
return word_vector_matrix # a numpy ndarray
def get_vector(text):
vector = np.zeroes(100,)
for i in range(5):
vector += word_vector_matrix[text.index(i)]
return vector
def apply_get_vector(data):
return data['text_column'].apply(get_vector)
if __name__ == '__main__':
word_vector_matrix = func1()
def parallelize_dataframe(data, func):
num_cores = multiprocessing.cpu_count()
num_partitions = num_cores # num chunks = num cores
chunks_dict = {i:np.array_split(data, num_partitions)[i] for i in range(num_partitions)}
pool = Pool(num_cores)
word_vectors = np.concatenate(pool.map(func, [chunks_dict[i] for i in chunks_dict]))
pool.close()
pool.join()
return word_vectors
vectors = parallelize_dataframe(df, apply_get_vector)
问题是我出错了
>>> NameError: name 'word_vector_matrix' is not defined
我觉得这很奇怪,因为我确实在main
中定义了word\u vector\u matrix
,但我没有明确地将它作为参数赋给get\u vector
函数。我没有在作用域中声明变量,这是不是有什么地方做错了?如果是,我该如何纠正
我确实找到了解释如何使用带有多个参数的
.apply()
,我觉得我们需要在这里使用这些参数,但我的情况略有不同,因为我使用的是多处理
。如果有人能解释一下怎么做,我将不胜感激。谢谢您需要在funct1()的范围内定义变量
。