파이썬(Python)을 활용하여 수집한 외부 데이터를 판다스(Pandas) 데이터프레임으로 성공적으로 불러왔다면, 데이터 분석의 다음 단계는 데이터의 구조적 특징을 파악하는 것입니다. 흔히 데이터 탐색(EDA, Exploratory Data Analysis)이라고 부르는 이 과정은 본격적인 전처리나 머신러닝 모델링을 시작하기 전에 반드시 수행해야 하는 필수 절차입니다.
특히 빅데이터분석기사(빅분기) 실기 시험이나 현업의 비즈니스 데이터 분석 환경에서는 원본 데이터가 어떤 인덱스 체계를 가졌는지, 컬럼 이름은 어떻게 구성되었는지, 그리고 데이터 타입이 적절하게 지정되었는지 파악하는 것이 분석 과정의 품질을 좌우합니다. 이번 글에서는 데이터프레임의 3대 핵심 구성 요소인 인덱스(Index), 컬럼(Columns), 데이터 타입(dtypes)을 확인하고 다루는 방법을 상세하게 정리하겠습니다.
1. 데이터프레임의 뼈대: 행 인덱스(Index)와 열 컬럼(Columns)
데이터프레임은 2차원 테이블 구조로, 가로축을 담당하는 ‘행 인덱스’와 세로축을 담당하는 ‘열 컬럼’이라는 뼈대로 이루어져 있습니다. 판다스에서는 이 두 요소를 속성(Attribute) 형태로 간편하게 조회할 수 있도록 지원합니다.
1.1. 행 인덱스 조회 및 활용 (df.index)
행 인덱스는 데이터프레임에서 각 행을 식별하기 위한 이름표(Label) 역할을 합니다. 파일을 처음 불러오면 대개 0부터 시작하는 정수형 인덱스(RangeIndex)가 자동으로 부여됩니다.
import pandas as pd
# 샘플 비즈니스 데이터 생성
customer_data = {
'고객ID': ['C001', 'C002', 'C003'],
'나이': [28, 35, 42],
'가입월': ['1월', '3월', '5월']
}
df = pd.DataFrame(customer_data)
# 인덱스 확인
print(df.index)
[출력 결과]
RangeIndex(start=0, stop=3, step=1)
출력 결과의 RangeIndex는 메모리를 효율적으로 사용하기 위해 0부터 3 미만까지 1씩 증가하는 규칙적인 인덱스가 적용되었음을 의미합니다. 만약 특정 컬럼(예: ‘고객ID’)을 행 인덱스로 지정하여 분석하고 싶다면 set_index() 함수를 활용하여 변경할 수 있습니다.
1.2. 열 컬럼 이름 조회 및 변환 (df.columns)
데이터 분석을 진행할 때 가장 자주 참조하는 요소가 바로 컬럼 이름입니다. 대용량 데이터를 다루다 보면 컬럼 이름에 불필요한 공백이 포함되어 있거나 영문 대소문자가 혼용되어 에러를 유발하기도 합니다.
# 컬럼 이름 확인
print(df.columns)
[출력 결과]
Index(['고객ID', '나이', '가입월'], dtype='object')
df.columns는 데이터프레임에 존재하는 모든 열 이름을 리스트와 유사한 Index 객체로 반환합니다. 이를 활용하면 df.columns = ['ID', 'Age', 'Month']와 같은 방식으로 컬럼 이름을 일괄 변경하는 작업도 수행할 수 있습니다.
2. 데이터의 성격 판단: 데이터 타입(dtypes, info)
데이터프레임 내부에 담긴 데이터들이 컴퓨터 메모리 상에서 어떤 형식으로 인식되고 있는지 확인하는 것은 전처리 방향을 결정하는 이정표가 됩니다. 판다스는 파이썬의 기본 데이터 타입보다 세분화된 고유의 타입을 제공합니다.
2.1. 핵심 데이터 타입(dtypes) 속성 조회
df.dtypes를 실행하면 각 컬럼별 데이터 타입을 시리즈 형태로 일목요연하게 출력해 줍니다.
print(df.dtypes)
[출력 결과]
고객ID object
나이 int64
가입월 object
dtype: object
판다스에서 자주 접하게 되는 대표적인 데이터 타입은 다음과 같습니다.
- int64: 정수형 데이터입니다. (예: 나이, 판매량, 주문 건수 등)
- float64: 실수형(소수점이 포함된) 데이터입니다. (예: 할인율, 평점, 매출 성장률 등)
- object: 판다스에서 주로 문자열 데이터를 나타내는 타입입니다. (예: 이름, 주소, 상품명 등)
- datetime64: 날짜와 시간 정보를 담는 타입입니다. (추후 시계열 분석 시 필수적으로 활용)
2.2. 데이터프레임 종합 진단: df.info()
빅데이터분석기사 실기 시험장에서 데이터를 불러온 후 직후 가장 먼저 확인하는 명령어 중 하나가 바로 df.info()입니다. 이 메서드는 전체 행의 개수, 컬럼 이름, 컬럼별 결측치(Null)가 아닌 데이터의 개수, 그리고 데이터 타입과 메모리 사용량까지 한눈에 보여주는 종합 진단 도구입니다.
df.info()
이 함수는 데이터프레임의 결측치 존재 여부와 데이터 타입의 왜곡 현상을 잡아내는 데 유용합니다. 예를 들어 숫자가 들어있어야 할 ‘매출액’ 컬럼에 쉼표(,)나 특수문자가 섞여 있어 데이터 타입이 object(문자열)로 잘못 인식되어 있는 상황을 조기에 발견하도록 돕습니다.
3. 구조적 특성을 활용한 데이터 크기 및 형상 파악 (df.shape)
데이터프레임이 총 몇 행, 몇 열로 구성되어 있는지 행렬의 차원을 직관적으로 확인하고 싶을 때는 shape 속성을 사용합니다. 이는 함수가 아닌 속성이므로 괄호()를 붙이지 않고 호출합니다.
print(df.shape)
[출력 결과]
(3, 3)
결과는 (행의 개수, 열의 개수) 형태의 튜플(Tuple)로 반환됩니다. 변수에 할당하여 사용할 때는 rows_count = df.shape[0], cols_count = df.shape[1]과 같이 인덱싱을 통해 행과 열의 크기를 각각 분리하여 프로그램 제어문에 활용할 수 있습니다.
4. 빅데이터분석기사 실기 시험 환경에서의 유의사항
빅데이터분석기사 실기 시험(작업형 제2유형 및 제3유형) 데이터셋은 수만 행 이상의 규모를 가집니다. 따라서 시험장 화면에 전체 데이터를 한 번에 출력하면 화면 출력이 지나치게 길어지고, 데이터 확인이 어려워질 수 있습니다.
이때는 다음과 같은 워크플로우를 고수하는 것이 코딩 실수를 줄이는 방법이 됩니다.
# 1. 데이터 로드 후 가장 먼저 데이터 구조와 타입, 결측치 파악
df.info()
# 2. 행과 열의 규모가 출제 기준과 맞는지 확인
print(df.shape)
# 3. 데이터의 상위 5개 행만 추출하여 실제 값의 형태를 눈으로 확인
df.head()
특히 데이터 타입 확인 과정에서는 범주형 변수(예: 성별, 등급)가 숫자(0, 1) 형태로 저장되어 있다면 단순한 수치형 데이터인지, 범주형 데이터를 숫자로 표현한 것인지 구분하여 해석해야 합니다. 반대로 수치형 변수가 문자열로 저장되어 있다면 향후 인코딩이나 스케일링, 모델 학습 과정에서 문제가 발생할 수 있습니다. 따라서 df.info()와 df.dtypes를 통해 데이터의 구조와 타입을 먼저 확인하는 습관이 중요합니다.
5. 요약 및 다음 화 안내
df.index와df.columns: 데이터프레임의 가로축(행) 이름표와 세로축(열) 이름표를 반환합니다.df.dtypes와df.info(): 데이터의 물리적 저장 타입(정수, 실수, 문자열 등)을 식별하고 결측치 분포를 요약해 줍니다.df.shape: 전체 데이터의 행과 열 크기를 차원 형태로 제공합니다.
다음 [판다스 6화]에서는 수많은 행과 열 중에서 내가 원하는 특정 조건의 데이터만 정밀하게 골라내는 방법인 원하는 데이터만 선택하기: loc와 iloc 사용법 및 차이점에 대해 본격적으로 알아보겠습니다. 판다스 인덱싱의 양대 산맥을 정복하여 데이터 추출 능력을 향상시켜 봅시다.