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())
'Python > Data Analysis' 카테고리의 다른 글
코사인 유사도(CountVectorizer , TF-IDF 벡터화) (0) | 2024.02.12 |
---|---|
Python 대용량 데이터 처리 라이브러리 - Dask (0) | 2024.02.04 |
Kaggle 시계열 데이터 분석 (2) | 2024.01.27 |
시계열 분석 - 시계열 데이터 특성, ARIMA (1) | 2024.01.08 |
Correlation Analytics - 상관계수, 공분산 계산 (0) | 2023.12.01 |