
파이썬 데이터 분석 기초: Pandas(판다스) 핵심 기능 마스터하기
- Development, Data Science
- Exien
- · 수정
Pandas는 엑셀 스프레드시트나 SQL 테이블 같은 표 형태 데이터를 파이썬에서 조작·분석하는 핵심 라이브러리입니다. 시작하려면 Series와 DataFrame 두 자료구조와, 파일 불러오기·선택과 필터링·결측치 처리에 쓰는 몇 가지 메서드만 익히면 됩니다.
Pandas는 왜 파이썬 데이터 생태계의 엑셀일까?
데이터 과학(Data Science)이나 머신러닝 분야에서 파이썬(Python)이 압도적인 1위 언어가 된 것은 데이터를 다루는 데 특화된 라이브러리 생태계 덕분이며, 그 중심에 있는 라이브러리가 **Pandas(판다스)**입니다.
Pandas는 표 형태의 데이터를 파이썬 프로그래밍 환경에서 쉽고 강력하게 조작하고 분석할 수 있도록 도와줍니다. 빅데이터 전처리, 정제, 필터링, 그룹화 등 데이터 분석가들이 하는 업무의 80% 이상이 Pandas를 통해 이루어진다고 해도 과언이 아닙니다.
Pandas는 어떻게 설치하고 임포트할까?
pip로 라이브러리를 설치한 뒤 임포트(import)합니다. 관례적으로 pd라는 별칭(alias)을 사용합니다.
# 설치 (터미널)
# pip install pandas
# 임포트
import pandas as pd
import numpy as np # 보통 수치 계산 라이브러리인 numpy도 함께 사용합니다.
Pandas의 Series와 DataFrame은 무엇일까?
Pandas가 데이터를 담기 위해 제공하는 두 가지 핵심 자료구조(그릇)입니다.
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
CSV·엑셀 파일은 어떻게 불러올까?
pd.read_csv()와 pd.read_excel()을 사용합니다. 실제 환경에서는 데이터를 코드에 직접 입력하기보다 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()
데이터는 어떻게 선택하고 필터링할까?
열 이름으로 선택하고, 조건식으로 행을 거르고(Boolean Indexing), loc·iloc으로 특정 위치를 지정합니다. 방대한 데이터 프레임에서 원하는 정보만 골라내는(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]
결측치(Missing Data)는 어떻게 처리할까?
isnull()로 결측치를 확인한 뒤 dropna()로 지우거나 fillna()로 채웁니다. 현실의 데이터는 비어있거나(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에는 이 외에도 데이터 병합(Merge, Concat), 그룹화 및 집계(GroupBy), 시계열 데이터 처리 등 방대하고 강력한 기능이 내장되어 있습니다.
처음부터 모든 기능을 외우려고 하기보다는, Kaggle이나 공공데이터포털에서 관심 있는 CSV 데이터셋을 하나 다운로드해 직접 불러오고 요리조리 만져보세요. 에러 메시지와 씨름하며 데이터를 다루어 보는 것만큼 좋은 학습법은 드뭅니다.


















