0
0 Комментариев

Есть такой код. Идея в том, чтобы ускорить обработку большого датафрейма мультипроцессингом.

class Get_data(object):
 
def __init__(self):
 
    self.data_path = '/../'
    self.t = "preAVL"
    self.num_cores = multiprocessing.cpu_count()
    self.num_partitions = 20
 
 
def getDF(self):
    df_preAVL = pd.DataFrame()
    search_string = self.data_path + "/*" + self.t + "*"
    for filename in glob.glob(search_string):
        try:
            df_preAVL = df_preAVL.append(pd.read_excel(filename))
        except:
            print "Problem file: {}".format(filename)
            raise
            df_preAVL = df_preAVL.reset_index(drop=True)
    del df_preAVL['trainUpTime']
    return df_preAVL
 
def setLossCarByIMEI(self, row):
    if not pd.isnull(row['car']):
        return row['car']
    if pd.isnull(row['dev_imei']):
        return np.NAN
 
    try:
        return map_imei2car_id[row['dev_imei']]
    except:
        pass
 
    return np.NAN
 
def parallelize_dataframe(self,df, func):
    df_split = np.array_split(df, self.num_partitions)
    pool = Pool(self.num_cores)
    df = pd.concat(pool.imap(func, df_split))
    pool.close()
    pool.join()
    return df
 
def pre_AVL(self,df):
    df['car'] = df.apply(s.setLossCarByIMEI, axis=1)
    return df

Вызываю таким образом

if __name__ == "__main__":
s = Get_data()
df_preAVL=s.getDF()
#df_preAVL = s.pre_avl(df_preAVL)
 
df_preAVL = s.parallelize_dataframe(df_preAVL, s.pre_AVL(df_preAVL))
 
 
 
print df_preAVL

Полный текст ошибки такой :

TypeError: 'DataFrame' object is not callable

Начинает ругаться на :

df = pd.concat(pool.imap(func, df_split))

Где у меня ошибка? Импорт необходимых модулей сделан-pandas,multiprocessing и тд


Добавить комментарий