具有相同功能的多列的多处理

时间:2018-10-11 15:16:01

标签: python pandas multiprocessing pool

我有一个包含10万行的csv文件。Columns= ['NAME','X','Y','angle1','angle2'......'angle360']

  NAME   X  Y  angle1  angle2 ... angel360
0    a  13  1       1       5 ...    2
1    b  12  7       4       5 ...    3
2    c  23  2       1       6 ...    1
3    d  32  6       1       2 ...    7
4    e  31  6       2       3 ...    4
5    f  24  3       3       2 ...    1
6    g  14  1       5       3 ...    2
7    h  14  2       8       3 ...    7
8    i  75  4       2       7 ...    5
...

我需要使用规则(X-angle[i])/Y计算每个角度,并将结果保存到名为result [i]的新列中。

import pandas as pd
from multiprocessing import Pool,cpu_count
import numpy as np
def parallelize_dataframe(df, func):
    df_split = np.array_split(df, num_partitions)
    pool = Pool(num_cores)
    df = pd.concat(pool.map(func, df_split))
    pool.close()
    pool.join()
    return df

def calculate(df,i):
    df['result'+str(i)] = (df['X']-df['angle'+str(i)])/df['Y']
    return df

def result(df):
    for i in range(360):
        df = calculate(df,i)
    return df

if __name__ == '__main__':
    num_cores = cpu_count() - 2  # number of cores on your machine
    num_partitions = 10 * num_cores  # number of partitions to split dataframe

    df = pd.read_csv("C:\user\tmp\file.csv")
    parallelize_dataframe(df,result)

结果是正确的,性能得到了增强,但还不够。 进行多处理需要花费近12分钟的时间,而没有进行多处理则需要20分钟。是否有提高性能的建议? 另一个问题是,处理小文件(约7,000行)的多处理比单处理慢时,我不知道为什么会发生这种情况。

0 个答案:

没有答案