[Python] Pandas Apply 함수 병렬처리 하기

Hyerim Lee·2023년 8월 25일
1

Data Engineering

목록 보기
4/4

Pandas DataFrame에 Apply 함수를 적용할 때, 병렬 처리로 속도를 크게 개선할 수 있습니다.

제 경우엔 병렬처리로 9시간 걸리던 잡을 1시간으로 단축시켰습니다.

Apply 함수를 사용한다면 꼭 병렬처리로 시간을 단축시키시는걸 추천드립니다 👍

1. 병렬 처리 함수 정의

from multiprocessing import cpu_count, Pool

# tqdm에 pandas 등록
tqdm.pandas()

# 병렬 처리 함수
def parallel_apply(df, main_func, func, n_cores=None):
    if not n_cores:
        n_cores = cpu_count()  # 사용 가능한 모든 CPU 코어를 사용

    # 데이터를 코어 수만큼 분할
    data_split = np.array_split(df, n_cores)
    
    # multiprocessing.Pool.map에 전달하기 위해 partial을 사용하여 함수 인자를 고정합니다.
    from functools import partial
    pool_func = partial(main_func, func=func)
    
    pool = Pool(n_cores)
    
    # 각 코어에서 apply 함수를 실행
    data = pd.concat(pool.map(pool_func, data_split))
    pool.close()
    pool.join()
    return data
# apply 적용 함수
def apply_function(data, func):
    return data.progress_apply(func)
# 실행할 함수 정의
def link_name_spell_checker(x): 
		"맞춤법 검사 함수"
    try:
        result = spell_checker.check(str(x)).checked
        return result
    except:
        result = str(x)
        return result

2. 실행

import Pandas as pd

# 데이터 로드
df = pd.read_csv('./data/df.csv')

# 맞춤법 검사를 완료한 문자열 칼럼 생성
df['spell_link_name'] = parallel_apply(df['link_name'], apply_function, link_name_spell_checker)
profile
Data Analyst

0개의 댓글