Notice
Recent Posts
Recent Comments
Link
«   2026/04   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
Tags
more
Archives
Today
Total
관리 메뉴

Elevation

ML 기초 (3) - pandas 2편 본문

ML, DL

ML 기초 (3) - pandas 2편

aste999 2026. 2. 3. 09:00

이어서 pandas의 주요 기능들에 대해 알아본다.

 

데이터 요약

ML 프로젝트의 데이터는 종종 큰 용량을 갖기 때문에, 데이터의 편집에 앞서 데이터 전체의 흐름을 읽고 분석하는 작업도 필요하다. df.info(), df.describe()로 데이터에 대한 요약을 확인해 볼 수 있다. info()는 column별로 결측치가 아닌 값의 개수 및 자료형을 알려 주고, describe()는 숫자 자료형인 column들에 대해 평균, 표준편차, 최대 및 최소, 사분위수 등을 알려준다.

 

 

describe에서 제시하는 각각의 통계량들은 대부분 df.mean(), df.std(), df.median(), df.max() 등 개별적으로도 확인할 수 있다. 한편 DataFrame 전체의 크기를 알고 싶을 때는 df.shape를 이용한다. (rows, columns) 형식의 튜플로 해당 DataFrame의 차원을 반환해 준다.

 

 

데이터 정리 및 그룹화

df.pivot_table()은 pivot table을 만드는 기능으로, 특정 column을 기준으로 설정했을 때 관찰 대상인 column의 값이 어떻게 변하는지 살펴볼 수 있다. 매개변수 index와 column에 기존 DataFrame의 column명을 입력하면, 해당 column들의 값을 행과 열로 배치한 새로운 DataFrame을 만들어 준다. 매개변수 aggfunc으로 집계(aggregation)를 위한 함수를 선택할 수 있는데, 선택 시 해당 함수로 집계한 기준 행/열에 따른 관찰 대상의 값이 새로운 DataFrame의 내용으로 들어가게 된다.

 

 

 

df.groupby()는 특정 column의 값을 기준으로 그룹화시킨 그룹 객체를 반환한다. 그룹 객체를 .agg()으로 집계 함수를 지정하여 변환해 주면, groupby()에서 기준으로 설정한 column의 값을 index로 하여 다른 column들의 값을 집계한 새로운 DataFrame을 반환한다. 

df_group = df.groupby('Pclass')

df_group.count()
df_group['Age'].agg([max, 'median', min])
df_group.agg({'Age':'median', 'Fare':'mean'})

 

 

pivot_table()과 groupby()는 데이터 분석 단계에서 쓰일 수 있는 강력한 기능인데, 이러한 데이터 분석은 실전 프로젝트에서 매우 중요하다고 볼 수 있다. 알고리즘에 대한 이해와 함께 데이터의 성질에 대한 정확한 이해가 동반될 때 좋은 성능을 낼 수 있는 모델을 제작할 수 있고, 때로는 모델의 성능을 높이기 위해 데이터를 적절히 변형시켜 더 적합한 데이터로 전환시킬 필요가 있기 때문이다.

 

 

결측치 처리

결측치란 말 그대로 빠져 있는 데이터를 뜻하는데, pandas에서는 NaN으로 결측치를 표기한다. 결측치는 모델에 데이터를 학습시키기 전에 반드시 처리해 주어야 한다. 결측치가 알고리즘에 들어가게 되면 오류가 나거나 전혀 엉뚱한 값으로 인식되어 모델의 성능 저하를 불러올 수 있기 때문이다.

 

결측치 처리에는 다양한 방법이 있다. 데이터가 충분히 많은 경우 결측치가 존재하는 행을 그냥 삭제시켜 버릴 수 있다. 그렇지 않다면 숫자형 데이터의 경우 평균이나 중앙값을 주로 이용하는 편이며 categorical 데이터는 최빈값을 이용해 결측치를 채우는 경우가 많다. df.isna()는 결측치를 True로, 그렇지 않은 값은 False로 표시한 새로운 DataFrame을 생성한다.

 

df.isna().sum()
df[df.isna().any(axis=1)].head(10)
# 임의의 세로줄(axis=1) 기준으로 결측치가 존재하는 경우만 골라, 앞에서부터 10개 행 출력
 

 

결측치를 채울 때에는 df.fillna()를 사용한다. 

'ML, DL' 카테고리의 다른 글

ML 기초 (2) - pandas  (0) 2026.02.02
ML 기초 (1) - ML 프로젝트  (0) 2025.05.24