我有一个包含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行)的多处理比单处理慢时,我不知道为什么会发生这种情况。