- Pandas의 벡터 연산2025년 03월 06일
- 31514
- 작성자
- 2025.03.06.오후02:32
최근에 회사에서 ETL 작업을 수행하면서, DB에 있는 테이블을 불러와 변환 작업을 한 뒤 새로운 테이블에 적재하는 일을 진행했다.
변환 작업은 Pandas를 사용했고, 이 과정에서 성능 향상을 고민하면서 알게된 벡터 연산에 대해 정리하려고 한다.
데이터프레임을 다룰 때 여러 가지 방법이 존재한다.
for문
,iterrows()
메서드,apply()
메서드와 같이 레코드를 하나씩 다루는 방법과 벡터와 같이 모든 레코드를 한 번에 다루는 방법이 있다.당연하게도 처리 속도 측면에서 벡터 연산이 우월하며,
for문
,iterrows()
,apply()
중에서는apply()
가 가장 빠르다.레코드를 하나씩 다루는 방법을 스칼라라고 하는데, 다음과 같은 특징을 가지고 있다.
for문
: 레코드를 하나씩 순회iterrows()
: 데이터프레임의 구조에 맞게 설계되어 레코드를 하나씩 효율적으로 순회apply()
: 원래는 데이터프레임에 함수를 적용하기 위해 설계된 것이지만, 속도 최적화도 가능
끝으로 내가 사용한 벡터 연산 코드의 예시를 보여주고 마무리하고자 한다.
# pixel_count에서 1,000을 나눠 KP 계산 df_to_insert["kkpn"] = df["pixel_count"] / 1000
더불어 numpy의
where
메서드도 벡터 연산이므로 참고하자.df_to_insert["latitude"] = np.where(df["tsi_lat"].isna() & df["tsi_lon"].isna(), df["pds_lat"], df["tsi_lat"])
그리고 벡터 연산의 경우는 입력값의 데이터 개수와 출력값의 데이터 개수가 동일해야 한다는 점을 잊지말자!
'개발' 카테고리의 다른 글
LATERAL JOIN에 대해 알아보자. (0) 2025.03.17 SQLAlchemy와 psycopg2 중 어느 것을 사용할까? (0) 2025.03.06 Chunk를 사용하여 대용량 파일 전송하기 (0) 2025.01.17 Synology Active Backup for Business 사용법 (Windows) (0) 2025.01.06 postgres 마이그레이션 (0) 2024.12.31 다음글이전글이전 글이 없습니다.댓글
스킨 업데이트 안내
현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)