개요
2024.10.08-[Pandas] read_csv - 큰 데이터프레임을 행 수를 기준으로 잘라 로드하기에서 데이터가 아주 많은 CSV 파일을 로드할 때 행 수를 기준으로 작은 조각으로 나눠서 로드하고 처리했다. 그런데 이번에는 이미 처리과정에 있는 데이터프레임을 작은 조각으로 나누고 싶다.
방법을 정리해 둔다.
numpy.array_split
array_split 함수는 분할할 array와 분할할 개수에 해당하는 indices_or_sections 전달받아 indices_or_sections 만큼의 하위 array 목록을 반환한다. 분할할 array에는 DataFrame도 전달할 수 있다.
import numpy as np
import pandas as pd
df = pd.read_csv('DimenLookupEthnic8317.csv')
for chunk in np.array_split(df, 4):
print(chunk)
다만 split_array 함수는 행 수를 기준으로 자르는 게 아니고, n개만큼의 하위 array가 되게끔 자르기 때문에 고정된 행 수로 split 해야 할 때는 하위 array의 수를 별도로 계산해주어야 할 것 같다.
슬라이싱
아래는 행 개수를 기준으로 슬라이싱 한 하위 데이터프레임 목록을 반환한다. 0부터 행 개수(df.shape[0])까지 chunksize 간격으로 반복하여 슬라이싱하는 방식이다.
import numpy as np
import pandas as pd
chucksize = 3
df = pd.read_csv('DimenLookupEthnic8317.csv')
chunks = [df[i:i + chucksize].copy() for i in range(0, df.shape[0], chucksize)]
for chunk in chunks:
print(chunk)
참고 문서
https://stackoverflow.com/questions/17315737/split-a-large-pandas-dataframe