상세 컨텐츠

본문 제목

Pandas row iteration 속도 향상 (Speed Up)

개발/python-속도향상(optimization)

by Matthew0633 2022. 5. 12. 19:09

본문

일반적으로, pandas 에서 apply() 를 활용했을 때 데이터의 행들을 순회하며, 전처리 적용이 빠르게 가능하고, 나도 apply() 를 매우 자주 사용하는 편이다

그런데 종종 해당 row들을 순회하며, 데이터를 처리하여 열을 만드는 것이 아닌, 다른 목적으로 특정 데이터들을 뽑아내서 따로 저장해야할 때가 있다. 혹은 apply() 사용 시 debugging 용도로 반복문을 통한 DataFrame 순회가 필요할 때가 있다.

이 때 일반적으로 iterrows() 를 사용한다

# iterrows() 사용
temp=[]
for i,row in df.iterrows():
  name_new = row['name']
  temp.append(name_new)

그런데 이 방법은 단순하나, 속도가 아쉬운 특징이 있다.

그래서 좀 더 빠르게 사용할 수 있는 두가지를 소개하고자 한다

첫번째는 행의 index 를 순회하여 iloc()으로 순회하는 방법이다

# row의 index 사용
temp=[]
for idx in range(0,df.shape[0],1):
  name_new = df['name'].iloc[idx]
  temp.append(name_new)

두번째는 to_dict() 를 사용하여 DataFrame을 dict type으로 변환하여 순회하는 것이다

# to_dict() 사용
df_dict = df.to_dict('records')
temp=[]
for row in df_dict:
  name_new = row['name']
  temp.append(name_new)

아래 글에서 소개하는 내용을 바탕으로 업무에 적용하고 정리해보았다. 실제로 나도 업무에서 다루는 데이터가 클수록 꽤 큰 성능차이를 경험했다

<Reference>

https://towardsdatascience.com/400x-time-faster-pandas-data-frame-iteration-16fb47871a0a

관련글 더보기

댓글 영역