Pandas中的多处理错误

时间:2018-02-02 09:34:59

标签: python multiprocessing

我尝试在pandas中使用多处理:

from multiprocessing import Pool, cpu_count
def applyParallel(DF, func, data):
    with Pool(cpu_count()) as p:
        ret_list = p.map(func, [(DF, group) for name, group in data])
    return pd.concat(ret_list, axis  = 1)

def apply_row_foo(input_df, data_group):
    dfn = pd.DataFrame()
    for i in data_group['name']:
        dfn['result_' + str(i)] = input_df['student'].apply(lambda x : myfunction(x, i))
    return dfn

if __name__ == '__main__':
    z = applyParallel(df.groupby(df.index % 4), apply_row_foo, DATA)

TypeError: apply_row_foo() missing 1 required positional argument: data_group

如何解决这个问题? 谢谢。

2 个答案:

答案 0 :(得分:2)

您已定义apply_row_foo以获取两个参数,但实际上您正在使用单个元组中的这两个参数调用它。解决此问题的一种方法是让apply_row_foo接受元组参数:

def apply_row_foo(params):
    input_df, data_group = params

答案 1 :(得分:0)

apply_row_foo()是一个传递两个参数的函数,并且在调用它时不会传递它们。只需按照给定的顺序给函数提供所需的参数,或者提供类似

的函数

函数(arg1 = val1,arg2 = val2)