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()的范围内定义变量