【发布时间】:2023-04-06 07:02:01
【问题描述】:
我想在大型数据集上使用多重处理来查找两列的乘积,并使用参数中的给定参数过滤数据集。我构建了一个测试集,但我无法让多处理在这个集上工作。
首先,我试图在parallelize_dataframe 函数中划分数据集,然后在subset_col 函数中应用乘法函数和过滤函数。稍后我将完整的数据集附加回 parallelize_dataframe。
import numpy as np
import pandas as pd
from multiprocessing import Pool
from multiprocessing import Lock
df = pd.DataFrame({'col1': [1, 0, 1, 1, 1, 0, 0, 1, 0, 1],
'col2': ['aa', 'aa', 'aa', 'bb', 'bb', 'bb', 'bb', 'cc', 'cc', 'cc'],
'col3': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
'col4': [21, 22, 23, 24, 25, 26, 27, 28, 29, 30]})
def subset_col(df, p):
print("Working with number: " + str(p))
df[col5] = df[col3]*df[col4]
df= df[df['col1'] == p]
def parallelize_dataframe(df, p, func, n_cores=80):
df_split = np.array_split(df, n_cores)
pool = Pool(n_cores)
df = pd.concat(pool.map(func, df_split, p))
pool.close()
pool.join()
return df
df3 = parallelize_dataframe(df,1,subset_col)
结果应该是 col3 和 col4 的乘积,其中 col1 用一个值过滤。但我总是收到一条错误消息:
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in parallelize_dataframe
struct.error: 'i' format requires -2147483648 <= number <= 2147483647
但是,如果我从所有功能中删除过滤器“p”,它就可以正常工作。有人可以帮我调试一下吗?
【问题讨论】:
标签:
python
pandas
numpy
python-multiprocessing
multiprocess
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在 python 3.4.7 的 pool.map 函数中添加额外的随机参数作为参数 - Python技术站