일반적으로, 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
Pandas Filtering 속도 향상 ( Conditional Selection Speed Up) (0) | 2022.05.17 |
---|
댓글 영역