파이썬(Python)을 활용한 데이터 분석과 전처리 과정에서 가장 먼저 마주하는 난관은 바로 “데이터를 어떤 형태로 담아서 다룰 것인가?”입니다. 판다스(Pandas) 라이브러리는 이 문제를 해결하기 위해 강력한 두 가지 핵심 자료구조인 시리즈(Series)와 데이터프레임(DataFrame)을 제공합니다.
현업의 비즈니스 데이터 분석가나 빅데이터분석기사(빅분기) 실기 시험을 준비하는 수험생이라면 이 두 자료구조의 개념과 차이점을 완벽하게 이해해야 합니다. 단순히 코드를 외우는 것을 넘어, 자료구조의 뼈대를 이해해야 복잡한 결측치 처리나 그룹 집계 연산을 자유자재로 수행할 수 있습니다. 이번 글에서는 비즈니스 예시를 통해 판다스의 핵심 자료구조를 깊이 있게 알아보겠습니다.
1. 1차원 데이터의 핵심: 시리즈(Series)란 무엇인가?
1.1. 시리즈의 개념 정의
시리즈(Series)는 판다스에서 제공하는 가장 단순한 1차원 배열 형태의 자료구조입니다. 파이썬의 기본 자료형인 리스트(List)나 딕셔너리(Dictionary), 그리고 넘파이(NumPy)의 1차원 배열(ndarray)와 유사하지만 매우 중요한 차별점을 가집니다. 바로 ‘인덱스(Index)’를 커스텀하여 가질 수 있다는 점입니다.
시리즈는 크게 두 가지 요소로 구성됩니다.
- 값(Values): 실제 저장되는 데이터 배열입니다. (숫자, 문자열, 불리언 등 모두 가능)
- 인덱스(Index): 각 데이터 값에 매핑된 이름표(Label)입니다. 지정하지 않으면 0부터 시작하는 정수 인덱스가 자동으로 부여됩니다.
1.2. 비즈니스 예시로 이해하는 시리즈
쇼핑몰의 특정 날짜 ‘상품별 판매량’을 시리즈로 나타내 보겠습니다.
import pandas as pd
# 상품별 판매량 데이터 생성
sales = pd.Series([15, 30, 8], index=['스마트폰', '노트북', '태블릿'])
print(sales)
[출력 결과]
스마트폰 15
노트북 30
태블릿 8
dtype: int64
이처럼 시리즈는 ‘상품명’이라는 인덱스와 ‘판매량’이라는 값을 1:1로 매핑하여 관리합니다. 덕분에 인덱스 이름(sales['노트북'])만으로 데이터에 직관적으로 접근할 수 있으며, 데이터의 타입(int64)이 아래에 명시됩니다.
2. 2차원 표 형식 데이터: 데이터프레임(DataFrame)이란 무엇인가?
2.1. 데이터프레임의 개념 정의
데이터프레임(DataFrame)은 행(Row)과 열(Column)로 구성된 2차원 테이블 형태의 자료구조입니다. 우리가 가장 자주 접하는 엑셀(Excel) 시트나 데이터베이스(RDBMS)의 테이블과 동일한 구조를 가집니다.
DataFrame은 동일한 행 인덱스를 공유하는 여러 Series가 열(Column) 방향으로 정렬된 2차원 자료구조입니다. 각각의 열은 고유한 데이터 타입을 가진 하나의 시리즈이며, 이 시리즈들이 모여 하나의 거대한 데이터프레임을 형성합니다.
데이터프레임은 다음과 같이 세 가지 주요 요소로 구성됩니다.
- 값(Values): 2차원 그리드에 저장되는 실제 데이터들입니다.
- 인덱스(Index): 가로 방향의 행을 식별하는 이름표입니다.
- 컬럼(Columns): 세로 방향의 열을 식별하는 이름표입니다.
2.2. 비즈니스 예시로 이해하는 데이터프레임
이번에는 주문 번호를 인덱스로 하고, 상품명, 판매량, 매출액을 열로 가지는 비즈니스 주문 데이터를 생성해 보겠습니다.
import pandas as pd
# 주문 데이터 생성
order_data = {
'상품명': ['스마트폰', '노트북', '태블릿', '스마트폰'],
'판매량': [15, 30, 8, 12],
'매출액': [15000000, 45000000, 4800000, 12000000]
}
df = pd.DataFrame(order_data, index=['ORD-01', 'ORD-02', 'ORD-03', 'ORD-04'])
df
[출력 결과]
| 상품명 | 판매량 | 매출액 | |
| ORD-01 | 스마트폰 | 15 | 15000000 |
| ORD-02 | 노트북 | 30 | 45000000 |
| ORD-03 | 태블릿 | 8 | 4800000 |
| ORD-04 | 스마트폰 | 12 | 12000000 |
위 표에서 가로줄(ORD-01, ORD-02 등)은 각 주문 건을 식별하는 행 인덱스이며, 세로줄(상품명, 판매량, 매출액)은 컬럼(열)입니다. 각 열(예: ‘판매량’ 열)을 하나만 떼어내서 확인하면 그것이 바로 앞서 배운 시리즈가 됩니다.
3. Series와 DataFrame의 핵심 차이점 및 연결 고리
판다스를 능숙하게 다루기 위해서는 두 자료구조의 차이점과 상호 변환 관계를 정확하게 이해해야 합니다. 아래 표를 통해 핵심 차이점을 한눈에 정리해 보겠습니다.
| 구분 | 시리즈 (Series) | 데이터프레임 (DataFrame) |
| 차원 (Dimension) | 1차원 (1D Array) | 2차원 (2D Matrix / Table) |
| 데이터 타입 (dtype) | 일반적으로 하나의 dtype으로 관리됨 | 각 열마다 서로 다른 타입 가능 (Heterogeneous) |
| 구조적 구성 | 값(Value) + 행 인덱스(Index) | 값(Value) + 행 인덱스(Index) + 열 이름(Column) |
| 엑셀과의 비교 | 엑셀의 특정 ‘하나의 열(Column)’ | 엑셀의 ‘시트(Sheet) 전체’ |
3.1. 데이터프레임에서 시리즈 추출하기
데이터프레임의 특정 열을 선택하면 시리즈가 반환됩니다.
Python
# '판매량' 열만 추출하기 (시리즈 반환)
sales_series = df['판매량']
print(type(sales_series)) # <class 'pandas.core.series.Series'>
3.2. 시리즈를 모아 데이터프레임 만들기
동일한 인덱스를 가진 여러 시리즈를 딕셔너리 형태로 묶어주면 손쉽게 데이터프레임으로 결합할 수 있습니다. 판다스는 이처럼 단일 데이터 흐름(Series)과 입체적 데이터 테이블(DataFrame)을 유연하게 오가며 분석을 수행하도록 돕습니다.
4. 빅데이터분석기사 실기 시험에서의 실전 활용 포인트
빅데이터분석기사 실기(특히 작업형 제2유형 및 제3유형)를 풀다 보면, 자료구조의 성격을 오해하여 치명적인 코딩 실수를 범하는 경우가 많습니다. 반드시 기억해야 할 두 가지 포인트를 정리합니다.
4.1. 대괄호 개수에 따른 반환 타입 변화 (초보자 빈출 실수)
데이터프레임에서 특정 컬럼을 추출할 때 대괄호를 한 개 쓰느냐, 두 개 쓰느냐에 따라 완전히 다른 객체가 반환됩니다.
df['상품명']: 시리즈(Series) 형태로 반환됩니다. (1차원)df[['상품명']]: 데이터프레임(DataFrame) 형태로 반환됩니다. (2차원)
머신러닝 모델에 피처(Feature) 데이터를 입력할 때 2차원 형태를 요구하는 경우가 많으므로, 단일 컬럼이라 하더라도 2차원 데이터프레임 형태로 가공해야 할 때는 반드시 이중 대괄호(df[['target_column']])를 사용해야 오류를 방지할 수 있습니다.
4.2. 행/열 인덱스와 값의 분리 다루기
빅분기 실기 시험에서는 최종 제출 시 특정 인덱스나 값만 추출해 연산해야 합니다.
df.index: 행 이름들을 넘파이 인덱스 객체로 반환합니다.df.columns: 열 이름들을 반환합니다.df.values(또는df.to_numpy()): 판다스의 틀을 벗겨내고 내부의 순수한 2차원 넘파이 어레이(Array) 값만 추출하여 머신러닝 라이브러리(scikit-learn) 등에 바로 입력할 수 있게 해줍니다.
5. 요약 및 다음 예고
오늘 배운 내용을 세 줄로 요약해 보겠습니다.
- 시리즈(Series)는 인덱스를 가진 1차원 데이터이며, 일반적으로 하나의 dtype으로 관리됩니다.
- 데이터프레임(DataFrame)은 여러 개의 시리즈가 열 방향으로 결합된 2차원 표 형식 데이터입니다.
- 데이터프레임의 특정 열을 대괄호 하나(
df['col'])로 부르면 시리즈, 대괄호 둘(df[['col']])로 부르면 데이터프레임이 됩니다.
다음 [판다스 4화]에서는 공공데이터나 회사 내부 시스템에서 가장 흔하게 만나는 데이터 포맷인 CSV 파일과 엑셀 파일을 판다스로 불러오고 저장하는 방법(read_csv, read_excel)에 대해 깊이 있게 다뤄보겠습니다. 데이터 분석의 진짜 시작점인 파일 입출력을 완벽하게 마스터해 봅시다!