使用多处理池并行化熊猫数据框操作

时间:2020-06-11 20:23:32

标签: python pandas multithreading concurrency multiprocessing

我正在尝试使用多处理并行处理数据帧。 data_dict是DataFrames的字典,当前循环在单个内核中执行,因此我希望并行化此循环。

d = dict()
for symbol, df in data_dict.items():
    print(symbol)
    dd = df.pct_change(limit=1)
    dd['group'] = dd.index.strftime('%d')
    d[symbol] = dd.pivot_table(columns='group', values='close', index=dd.index).std()

df = pd.DataFrame.from_dict(d)
for col in df.columns:
    df[col] = df[col]/df[col][0]

我遇到一些问题。我想保持简单,但我忘记了如何使用Pool类来解决这个问题。

def process(symbol, df, d):
    dd = df.pct_change(limit=1)
    dd['group'] = dd.index.strftime('%d')
    d[symbol] = dd.pivot_table(columns='group', values='close', index=dd.index).std()


manager = multiprocessing.Manager()
managed_dict = manager.dict()

with multiprocessing.Pool(processes=16) as pool:
    for symbol, df in data_dict.items():
        print(symbol)
        pool.apply_async(process, symbol, df, managed_dict)

执行完上面的第二个代码后,managed_dict不包含任何已处理的DataFrame。

0 个答案:

没有答案