Pandas DataFrame에 Apply 함수를 적용할 때, 병렬 처리로 속도를 크게 개선할 수 있습니다.
제 경우엔 병렬처리로 9시간 걸리던 잡을 1시간으로 단축시켰습니다.
Apply 함수를 사용한다면 꼭 병렬처리로 시간을 단축시키시는걸 추천드립니다 👍
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
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)