
파이썬 데이터 분석 기초: Pandas(판다스) 핵심 기능 마스터하기
- Development, Data Science
- 20 Jun, 2024
파이썬 데이터 생태계의 엑셀, Pandas
데이터 과학(Data Science)이나 머신러닝 분야에서 파이썬(Python)이 압도적인 1위 언어로 자리 잡을 수 있었던 이유는 무엇일까요? 바로 데이터를 다루는 데 특화된 훌륭한 라이브러리 생태계 덕분입니다. 그 생태계의 가장 중심에 서 있는 핵심 라이브러리가 바로 **Pandas(판다스)**입니다.
Pandas는 엑셀(Excel)의 스프레드시트나 관계형 데이터베이스(SQL)의 테이블과 유사한 표 형태의 데이터를 파이썬 프로그래밍 환경에서 쉽고 강력하게 조작하고 분석할 수 있도록 도와줍니다. 빅데이터 전처리, 정제, 필터링, 그룹화 등 데이터 분석가들이 하는 업무의 80% 이상이 Pandas를 통해 이루어진다고 해도 과언이 아닙니다.
이번 포스팅에서는 Pandas의 두 가지 핵심 자료구조와 필수적인 데이터 조작 방법들을 가볍게 살펴보겠습니다.
Pandas 시작하기
Pandas를 사용하기 위해서는 먼저 라이브러리를 설치하고 임포트(import)해야 합니다. 관례적으로 pd라는 별칭(alias)을 사용하여 임포트합니다.
# 설치 (터미널)
# pip install pandas
# 임포트
import pandas as pd
import numpy as np # 보통 수치 계산 라이브러리인 numpy도 함께 사용합니다.
1. Pandas의 심장, 두 가지 핵심 자료구조
Pandas는 데이터를 담기 위해 Series와 DataFrame이라는 두 가지 특별한 그릇(자료구조)을 제공합니다.
Series (시리즈)
Series는 1차원 배열 형태의 데이터 구조입니다. 엑셀에서 표의 '하나의 열(Column)'이라고 생각하면 쉽습니다. 파이썬의 기본 리스트(List)와 비슷하지만, 각 데이터에 접근할 수 있는 **인덱스(Index)**라는 라벨(Label)을 달고 있다는 점이 다릅니다.
# 리스트를 Pandas Series로 변환
data = ['Apple', 'Banana', 'Cherry']
s = pd.Series(data, index=['a', 'b', 'c'])
print(s)
# 출력결과:
# a Apple
# b Banana
# c Cherry
# dtype: object
DataFrame (데이터프레임)
DataFrame은 2차원 테이블 형태의 데이터 구조입니다. 행(Row)과 열(Column)로 구성되어 편집되며, 여러 개의 Series가 모여서 하나의 DataFrame을 이룬다고 볼 수 있습니다. 실제 데이터 분석에서 가장 많이 다루게 될 구조입니다.
# 딕셔너리를 활용하여 DataFrame 생성
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'London', 'Paris']
}
df = pd.DataFrame(data)
print(df)
# 출력결과:
# Name Age City
# 0 Alice 25 New York
# 1 Bob 30 London
# 2 Charlie 35 Paris
2. 외부 데이터 불러오기
실제 환경에서는 데이터를 직접 코드에 입력하기보다는 CSV나 Excel 파일 형식으로 저장된 데이터를 불러와서 작업합니다. Pandas는 다양한 포맷의 파일을 읽고 쓰는 강력한 기능을 제공합니다.
# CSV 파일 읽기
df_csv = pd.read_csv('sales_data.csv')
# Excel 파일 읽기
df_excel = pd.read_excel('report.xlsx')
# 처음 5개 행 미리보기 (데이터의 생김새 파악에 필수!)
print(df_csv.head())
# 데이터 프레임의 전체적인 정보(결측치, 데이터 타입 등) 요약
df_csv.info()
3. 데이터 선택 및 필터링 핵심 기초
방대한 데이터 프레임에서 내가 원하는 정보만 쏙쏙 골라내는(Indexing) 방법은 Pandas의 핵심입니다.
열(Column) 선택하기
# 'Name' 열만 선택 (결과는 Series 형태로 반환됨)
names = df['Name']
# 여러 열을 동시에 선택할 때는 리스트로 묶어줍니다.
subset = df[['Name', 'City']]
조건에 맞는 행(Row) 필터링 (Boolean Indexing)
엑셀의 필터 기능과 같습니다. 특정 조건을 만족하는 행만 추출할 때 사용합니다.
# 나이가 30 이상인 사람만 필터링
over_30 = df[df['Age'] >= 30]
# 여러 조건을 조합할 때 (AND: &, OR: |)
# 주의: 조건식마다 반드시 괄호 ()를 쳐주어야 합니다.
condition_df = df[(df['Age'] >= 30) & (df['City'] == 'London')]
특정 위치의 데이터 선택 (loc, iloc)
loc[]: 인덱스의 '라벨(이름)'을 기준으로 선택합니다.iloc[]: 인덱스의 '위치(정수 번호)'를 기준으로 선택합니다.
# 인덱스가 0인 행의 모든 데이터 가져오기 (이름 기반)
row_0 = df.loc[0]
# 0번째 행, 1번째 열의 데이터 가져오기 (숫자 기반)
val = df.iloc[0, 1]
4. 결측치(Missing Data) 처리하기
현실의 데이터는 비어있거나(NaN, Not a Number) 잘못된 값으로 가득 찬 지저분한 상태인 경우가 많습니다. 분석을 시작하기 전 데이터 정제(Preprocessing) 단계에서 결측치 처리는 필수입니다.
# 결측치가 있는지 확인
print(df.isnull().sum())
# 결측치가 하나라도 포함된 행 삭제
df_dropped = df.dropna()
# 결측치를 다른 값(예: 0 또는 열의 평균값)으로 채우기
mean_age = df['Age'].mean()
df_filled = df.fillna(mean_age)
다음 단계로
지금까지 Pandas의 아주 기본적인 형태와 기능만 살펴보았습니다. Pandas는 이 외에도 데이터 병합(Merge, Concat), 그룹화 및 집계(GroupBy), 시계열 데이터 처리 등 매우 방대하고 강력한 기능들을 내장하고 있습니다.
처음부터 모든 기능을 외우려고 하기보다는, Kaggle이나 공공데이터포털에서 관심 있는 CSV 파일 데이터셋을 하나 다운로드하여 직접 불러오고 요리조리 만져보세요. 에러 메시지와 씨름하며 직접 데이터를 다루어 보는 것만큼 훌륭한 학습법은 없습니다.







