티스토리 뷰

파이썬 라이브러리인 판다스를 이용하여 데이터를 처리하는 과정에서 메모리 사용율이 올라가 주피터 노트북의 커널이 리셋되는 경우가 종종 발생합니다. 이런 경우의 원인과 해결 방법에 대해 알아보도록 하겠습니다.

 

대용량 데이터 처리

판다스는 데이터를 메모리에 로드하여 처리하므로, 데이터 크기가 크면 메모리 사용량도 높아집니다. 특히 메모리에 한 번에 로드할 수 없는 큰 데이터셋을 처리할 때 문제가 발생할 수 있습니다.

 

불필요한 복사

판다스의 일부 작업은 새로운 객체를 생성하여 반환합니다. DataFrame의 슬라이싱이나 groupby() 같은 작업은 원본 데이터를 복사하여 새로운 객체를 생성합니다. 이 경우 원본 데이터와 복사본이 동시에 메모리에 존재하므로 메모리 사용량이 높아집니다.

 

내부 데이터 형식

판다스는 다양한 데이터 형식을 지원하며, 각 형식은 메모리 사용량과 처리 속도에 영향을 미칩니다. 예를 들어, 정수형 데이터를 표현하는 데 사용되는 int64 데이터 형식은 메모리 사용량이 크기 때문에 데이터프레임이 큰 경우 메모리 사용량이 높아질 수 있습니다.

 

중간 결과 저장

계산 과정에서 중간 결과를 저장하는 경우 메모리 사용량이 높아질 수 있습니다. 특히 연속된 작업을 수행하는 경우 중간 결과를 임시로 저장하여 메모리에 보관할 수 있습니다.

 

메모리 최적화 방법

메모리 사용량을 최적화하기 위해서는 다음과 같은 방법을 고려할 수 있습니다.

 

대용량 데이터 처리

대용량 데이터를 처리해야 하는 경우 판다스의 chunksize 매개변수를 사용하여 데이터를 작은 덩어리(chunk)로 나누어 처리할 수 있습니다.

 

불필요한 복사 최소화

필요한 경우에만 데이터를 복사하고, 불필요한 복사를 최소화하여 메모리 사용량을 줄일 수 있습니다. copy() 메서드를 사용하여 새로운 객체를 명시적으로 생성하지 않도록 주의합니다.

 

데이터 형식 최적화

데이터 형식을 최적화하여 메모리 사용량을 줄일 수 있습니다. 예를 들어, 정수형 데이터가 일정 범위 내에 있다면 int32 형식을 사용하여 메모리 사용량을 줄일 수 있습니다.

 

중간 결과 제거

중간 결과가 더 이상 필요하지 않은 경우에는 해당 결과를 삭제하여 메모리 사용량을 줄일 수 있습니다. del 키워드를 사용하여 변수를 삭제하거나, 불필요한 데이터프레임을 삭제하여 메모리를 확보할 수 있습니다.

메모리 사용량이 높아지는 문제가 발생할 경우, 위의 방법들을 참고하여 메모리를 효율적으로 관리하고 최적화할 수 있습니다.