본문 바로가기
Python/Pandas

pandas dataframe MemoryError 오류 해결하기

by PySun 2023. 10. 27.
반응형

"MemoryError"는 파이썬 프로그램이 시스템 메모리 부족으로 인해 더 이상 데이터를 로드하거나 처리할 수 없을 때 발생하는 오류입니다. 이 오류를 해결하기 위해서는 메모리 사용을 최적화하거나 데이터 크기를 줄이는 방법을 고려해야 합니다. 다음은 "MemoryError"가 발생할 수 있는 상황과 해결 방법을 설명하겠습니다.

상황 1: 대용량 데이터프레임을 생성하는 경우

import pandas as pd

# 대용량 데이터프레임 생성 시 MemoryError 발생 가능
data = [i for i in range(1000000)]  # 100만 개의 데이터 생성
df = pd.DataFrame({'data': data})

이 경우, 데이터프레임을 생성할 때 메모리가 부족하여 "MemoryError"가 발생할 수 있습니다.

해결 방법 1: 메모리 사용 최적화

  • 대용량 데이터를 처리해야 하는 경우, 메모리 사용을 최적화하는 방법을 고려하세요. 데이터를 로드할 때 필요한 열만 선택하여 로드하거나, 데이터 타입을 최적화하여 메모리 사용을 줄일 수 있습니다.
# 필요한 열만 선택하여 데이터프레임 생성
df = pd.DataFrame({'data': data, 'other_data': other_data})
  • 대용량 데이터를 분할하여 처리할 수 있는 방법을 고려하세요. 데이터를 작은 덩어리로 나누어 처리한 다음 결과를 병합할 수 있습니다.

 

상황 2: 대용량 파일을 로드하는 경우

import pandas as pd

# 대용량 CSV 파일 로드 시 MemoryError 발생 가능
df = pd.read_csv('large_data.csv')

이 경우, 대용량 CSV 파일을 한 번에 로드할 때 메모리 부족으로 "MemoryError"가 발생할 수 있습니다.

해결 방법 2: chunksize 사용

pd.read_csv() 함수의 chunksize 매개변수를 사용하여 대용량 파일을 작은 덩어리로 나눠서 처리할 수 있습니다. 이 방법은 파일을 일부분씩 읽어들여 메모리 부족 문제를 해결합니다.

import pandas as pd

# chunksize를 사용하여 대용량 CSV 파일 읽기
chunk_size = 10000  # 읽어들일 행의 개수
chunks = []
for chunk in pd.read_csv('large_data.csv', chunksize=chunk_size):
    chunks.append(chunk)
df = pd.concat(chunks, ignore_index=True)

 

상황 3: 대용량 데이터프레임을 병합하는 경우

import pandas as pd

# 대용량 데이터프레임 병합 시 MemoryError 발생 가능
df1 = pd.DataFrame({'A': [1] * 1000000})
df2 = pd.DataFrame({'B': [2] * 1000000})
merged_df = pd.concat([df1, df2], axis=1)

이 경우, 두 개의 대용량 데이터프레임을 병합할 때 메모리 부족으로 "MemoryError"가 발생할 수 있습니다.

해결 방법 3: 메모리 사용 최적화 및 분할 병합

  • 대용량 데이터프레임을 병합하기 전에 필요한 열만 선택하여 메모리 사용을 최적화하세요.
merged_df = pd.concat([df1[['A']], df2[['B']]], axis=1)
  • 대용량 데이터프레임을 분할하여 작은 덩어리로 병합하세요.
chunk_size = 100000  # 작은 덩어리 크기
chunks = []
for i in range(0, len(df1), chunk_size):
    chunk_df1 = df1[i:i+chunk_size]
    chunk_df2 = df2[i:i+chunk_size]
    merged_chunk = pd.concat([chunk_df1, chunk_df2], axis=1)
    chunks.append(merged_chunk)
merged_df = pd.concat(chunks, ignore_index=True)

 

"MemoryError"를 해결하려면 대용량 데이터를 효율적으로 처리하는 방법을 고려해야 합니다. 이는 메모리 최적화, 데이터 분할, 혹은 필요한 경우 더 많은 메모리를 확보하는 등 다양한 방법을 통해 해결될 수 있습니다.

반응형