본문 바로가기
Python/Data Analysis

Python 대용량 데이터 처리 파라미터 - Pandas

by skwkiix 2024. 2. 1.
728x90

pd.read_csv(file_path, usecols=usecols, dtype=dtype, chunksize=chunksize)

파일 사이즈가 매우 큰 파일은 한번에 불러오는 경우 kernal이 종료되는 경우가 있다. 소개할 방법들은 대용량 처리를 간단하게 할 수 있고, 대용량 파일을 다룰 때 가장 먼저 고려할 수 있는 방법이다.


chunksize

대용량 데이터 파일을 한 번에 메모리에 로드하지 않고, 지정된 크기의 청크(chunk)로 나누어서 읽을 때 사용한다.  pd.read_csv('file.csv', chunksize=1000) : 파일을 1000행 단위로 볼러옴 > 하나의 DataFrame으로 반환

 

dtype

각 열의 데이터 유형을 지정한다. 데이터를 읽을 때 Pandas는 데이터의 유형을 추측하려고 하는데,  데이터 파일이 큰 경우, 추측에 메모리가 사용되는 것은 비효율적이다. 따라서 데이터 유형을 미리 지정한다. 

 

usecols

데이터 파일에서 읽어올 열을 지정한다. 실제로 필요한 열만 선택하여 읽어와서 메모리를 절약하고 불필요한 데이터를 걸러낸다. 

 

import pandas as pd

# 대용량 CSV 파일 경로
file_path = 'large_data.csv'

# 필요한 열의 리스트
usecols = ['column1', 'column2']

# 열의 데이터 유형 지정
dtype = {'column1': int, 'column2': float}

# chunk 단위로 데이터 읽기 및 처리
chunksize = 1000
for chunk in pd.read_csv(file_path, usecols=usecols, dtype=dtype, chunksize=chunksize):
    # 각 chunk에서 특정 열 데이터 출력
    print(chunk['column1'])

 

필요한 컬럼과 해당 컬럼의 dtype을 지정해 준 후, 실행환경에 따라 chunk size를 조절하여 읽어온다.

아래는 주식 데이터를 파일을 chuck, dtype, usecols 각각 불러와서 concat 한 실행코드이다.

%%time
# 청크 사이즈 설정
chunk_size = 5000

# 데이터를 담을 빈 리스트 생성
dfs = []

# 청크 사이즈로 파일을 읽고 리스트에 추가
for file in file_list:
    chunk_list = []
    for chunk in pd.read_csv(file, usecols=['price', 'qty', 'quote_qty', 'time', 'is_buyer_maker'], dtype={'price': float, 'qty': float, 'quote_qty': float, 'time': float}, chunksize=chunk_size):
        chunk_list.append(chunk)
    dfs.append(pd.concat(chunk_list, ignore_index=True))

# 리스트에 있는 모든 DataFrame을 concat
combined_df = pd.concat(dfs, ignore_index=True)

# 결과 확인
print(combined_df.head())