Multiprocessing pandas package 2개 소개

2019. 5. 8. 21:19분석 Python/Pandas Tip

728x90

일단 이전에 내가 하고 싶었던 replace에 대해서 둘다 적용이 되지는 않는 것 같다. ㅠㅠㅠ

https://data-newbie.tistory.com/95

 

multiprocessing으로 pandas replace 하면 더 빠를까?

피드백을 좋아합니다! 머신러닝을 할 때 category 형식은 숫자 형식으로 바꿔줘야 한다. 이럴 때 가장 쉬운 방법은 cat.codes를 사용하면 빠르게 바꿀 수 있다. category["nameDest"].cat.codes 하지만 가끔 이렇..

data-newbie.tistory.com

구조를 잘 못 짠걸수도 있지만 현재 상황은 그렇다.

  • 둘다 progress bar 지원해줌

두 패키지를 소개 하려고 한다.

pandas_multiprocess URL

pip install pandas-multiprocess
  • 괜찮다고 생각하는 이유
    • 안정되게 작동하는 것 같다.
    • 코어수 조절 가능
    • argument 쉽게 넣을 수 있는 것 같다.

 

df_len = 1000

df = pd.DataFrame({'col_1': np.random.normal(size=df_len),

                   'col_2': np.random.normal(size=df_len)

                   })

args = {'wait': 0.01}

def func(data_row, wait):

    ''' A sample function

    It takes 'wait' seconds to calculate the sum of each row

    '''

    time.sleep(wait)

    data_row['sum'] = data_row['col_1'] + data_row['col_2']

    return data_row

print('Running examples...')

# Using pandas_multiprocess.multi_process() with 8 processes

t0 = time.time()

result = multi_process(func=func,

                       data=df,

                       num_process=8,

                       **args)

print("8 processes run time {:f} seconds.".format(time.time() - t0))

 

pandarallel URL

pip install pandarallel
    • 별로라 생각하는 이유
      • 코어수 조절이 안되는 것 같다.?
      • 에러가 자주 발생
def func(data_row):

    ''' A sample function

    It takes 'wait' seconds to calculate the sum of each row

    '''

    data_row['sum'] = data_row['col_1'] + data_row['col_2']

    return data_row



pandarallel.initialize()

df2 = df.parallel_apply(func , axis = 1 )
728x90