Python/NumPy | Pandas

[Pandas] 행 수를 기준으로 DataFrame split하기

비번변경 2024. 10. 30. 11:15

개요

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