이번 포스팅에서는 pandas 내 데이터프레임에서 인덱싱을 하는 loc, at과 iloc, iat 함수의 차이를 분석해보도록 하겠습니다.
데이터 프레임으로는 kaggle의 타이타닉 데이터셋을 활용하여 예시를 들어보도록 하겠습니다.
loc, at 분석
이 두 함수에서 인덱싱을 하는 여러 경우에 대하여 가능 여부를 살펴보도록 하겠습니다.
1) 단일 데이터 인덱싱
예를 들어, 'Pclass' 열의 100번 인덱스를 가지는 행의 값을 찾는 경우 두 함수 모두 정상 작동하는 것을 확인할 수 있습니다.
2) 한 column 내 범위 인덱싱
예를 들어, 'Pclass' 열의 100~102번 인덱스를 가지는 행들의 값을 찾는 경우 loc 함수는 정상 작동되지만, at 함수는 지원하지 않는 기능이라 ValueError가 등장하는 것을 확인하실 수 있습니다.
3) 한 row 내 여러 column 인덱싱
100번 인덱스를 가지는 행의 'Pclass'와 'Age' 열의 값을 찾는 경우 loc 함수는 정상 작동되지만, at 함수는 지원하지 않는 기능이라 TypeError가 등장하는 것을 확인하실 수 있습니다.
4) 여러 row, 여러 column 인덱싱
100~102번 인덱스를 가지는 행들의 'Pclass'와 'Age' 열의 값을 찾는 경우 loc 함수는 정상 작동되지만, at 함수는 지원하지 않는 기능이라 ValueError가 등장하는 것을 확인하실 수 있습니다.
5) 단일 인덱싱 수행 시간 비교
단일 인덱싱을 10만회씩 수행하여 소요된 시간을 비교해보았습니다. at함수가 loc함수에 비해 2배 가량 빠른 속도를 보였습니다. 이 차이는 CPU 환경이나 데이터프레임 크기에 따라 달라질 수는 있지만, at함수가 단일 인덱싱에서는 확실히 좋은 성능을 보이는 듯 합니다.
참고로, df.at[100, 'Pclass'] = 2 이런식으로 인덱싱된 위치에 새로운 값을 할당하는 기능도 수행이 가능합니다.
iloc과 iat에서도 위와 마찬가지로 단일 인덱싱에서 iat이 더 빠른 속도를 보이며, 여러 row/column을 인덱싱할 때는 iat은 지원하지 않는 상황은 동일합니다.(단, iat이 3번 경우에서는 TypeError가 아닌 ValueError가 호출됩니다.)
요약하면, 단일 인덱싱에서는 at, iat이 작업 시간 상 유리하고, 여러 row/column을 인덱싱해야하는 상황에서는 loc, iloc을 사용해야만 한다는 것입니다.
'Python > Pandas' 카테고리의 다른 글
[Pandas] 파이썬 판다스 그룹화 하기 : groupby 함수 (4) | 2021.11.16 |
---|---|
[Pandas] 파이썬 데이터프레임 열, 행에 함수 적용 - apply 함수 (0) | 2021.11.11 |
[Pandas] 인덱스 초기화, 재정렬 (groupby 후 행 정렬) - reset_index (0) | 2021.11.04 |