본문 바로가기
Python/Pandas

pandas dataframe MemoryError 오류 해결하기

by PySun 2023. 10. 1.
반응형

판다스(DataFrame)를 사용할 때 MemoryError가 발생할 수 있는 예시 코드와 그 해결 방법을 설명하겠습니다.

예시 코드:

위 코드에서는 매우 큰 데이터프레임을 생성하고 있습니다. 이렇게 대용량 데이터를 처리할 때 시스템 메모리 부족으로 MemoryError가 발생할 수 있습니다. 이러한 오류를 해결하려면 다음과 같은 방법을 사용할 수 있습니다.

import pandas as pd

# 대용량 데이터프레임 생성
data = {'숫자열': list(range(1, 10**7)),
        '문자열열': ['테스트'] * (10**7)}

df = pd.DataFrame(data)

해결 방법:

데이터 크기 축소:

데이터의 크기를 줄이는 방법을 고려하세요. 필요한 경우 데이터를 샘플링하거나 필요 없는 열을 제거하세요.

data = {'숫자열': list(range(1, 10**6)),
        '문자열열': ['테스트'] * (10**6)}

df = pd.DataFrame(data)

배치 처리:

대용량 데이터를 처리할 때는 배치 처리를 고려할 수 있습니다. 데이터를 작은 배치로 나눠서 처리하고 그 결과를 합치세요.

import pandas as pd

# 데이터를 여러 개의 작은 데이터프레임으로 분할하여 처리하는 함수
def process_data(data):
    # 데이터 처리 로직 추가
    return processed_data

data = {'숫자열': list(range(1, 10**7)),
        '문자열열': ['테스트'] * (10**7)}

batch_size = 10000  # 작은 배치 크기 설정
num_batches = len(data['숫자열']) // batch_size

# 작은 배치로 데이터를 나눠서 처리
batch_results = []
for i in range(num_batches):
    start_idx = i * batch_size
    end_idx = (i + 1) * batch_size
    batch_data = {'숫자열': data['숫자열'][start_idx:end_idx],
                  '문자열열': data['문자열열'][start_idx:end_idx]}
    processed_batch = process_data(batch_data)
    batch_results.append(processed_batch)

# 배치 결과 합치기
final_result = pd.concat(batch_results)

Dask 사용:

Dask는 판다스와 유사한 API를 제공하지만 병렬 및 분산 컴퓨팅을 지원하여 대용량 데이터를 처리하기에 적합합니다. Dask를 사용하여 데이터를 처리할 수 있습니다.

import dask.dataframe as dd

data = {'숫자열': list(range(1, 10**7)),
        '문자열열': ['테스트'] * (10**7)}

df = dd.from_pandas(pd.DataFrame(data), npartitions=8)  # 여기서 8은 작업을 분할할 파티션 수입니다.

데이터베이스 사용:

대용량 데이터를 다룰 때는 데이터베이스 시스템을 사용하는 것이 효율적일 수 있습니다. 데이터베이스에 데이터를 저장하고 쿼리하여 필요한 결과를 가져올 수 있습니다.

메모리 최적화:

메모리 최적화 기법을 사용하여 시스템 메모리 사용을 최적화하세요. 예를 들어, 필요 없는 변수를 삭제하고 메모리를 정리하는 방법을 고려하세요.

대용량 데이터를 처리할 때는 메모리 사용에 주의해야 합니다. 데이터를 효율적으로 관리하고 분할 처리를 통해 MemoryError를 방지할 수 있습니다.

반응형