Pandas 기초 | Python 데이터 분석 라이브러리 완벽 정리
이 글의 핵심
Pandas 기초: Python 데이터 분석 라이브러리 Pandas 기본·데이터 읽기/쓰기.
들어가며
”데이터 분석의 필수 도구”
Pandas는 데이터 분석과 조작을 위한 Python의 핵심 라이브러리입니다.
실무 활용 사례: 데이터 분석, 웹 개발, 자동화 프로젝트에서 실제로 사용한 패턴과 코드를 바탕으로 정리했습니다. 초보자가 흔히 겪는 오류와 해결법을 포함합니다.
실무에서 느낀 Python의 매력
처음 Python을 배울 때는 “이게 정말 프로그래밍 언어인가?” 싶을 정도로 간결했습니다. C++에서 10줄로 작성하던 코드가 Python에서는 2~3줄로 끝나는 경우가 많았습니다. 특히 데이터 분석 프로젝트를 진행하면서 Pandas와 NumPy의 강력함을 체감했습니다. 엑셀로 몇 시간 걸리던 작업이 Python 스크립트로는 몇 초 만에 끝나는 걸 보고 동료들이 놀라워했던 기억이 납니다. 하지만 처음부터 순탄하지만은 않았습니다. 들여쓰기 하나 잘못해서 몇 시간을 헤맨 적도 있으며, 가상환경 설정이 꼬여서 프로젝트 전체를 다시 시작한 적도 있습니다. 이런 시행착오를 겪으며 깨달은 건, 환경 설정을 처음부터 제대로 하는 것이 얼마나 중요한지였습니다. 이 글에서는 제가 겪은 실수들을 바탕으로, 여러분이 같은 시행착오를 겪지 않도록 실전 팁을 담았습니다.
1. Pandas 기본
설치
pip install pandas
Series와 DataFrame
Series는 한 줄짜리 표(열 하나)이으며, DataFrame은 행·열이 있는 표 전체입니다. 엑셀 시트를 떠올리면 DataFrame이 한 장, 그중 한 열만 떼면 Series입니다.
import pandas as pd
# Series (1차원)
s = pd.Series([1, 2, 3, 4, 5])
print(s)
# 0 1
# 1 2
# 2 3
# 3 4
# 4 5
# DataFrame (2차원)
df = pd.DataFrame({
'name': ['철수', '영희', '민수'],
'age': [25, 30, 28],
'city': ['서울', '부산', '대구']
})
print(df)
# name age city
# 0 철수 25 서울
# 1 영희 30 부산
# 2 민수 28 대구
2. 데이터 읽기/쓰기
CSV 파일
# CSV 읽기
df = pd.read_csv('data.csv')
# CSV 쓰기
df.to_csv('output.csv', index=False, encoding='utf-8-sig')
# 특정 열만 읽기
df = pd.read_csv('data.csv', usecols=['name', 'age'])
# 구분자 지정
df = pd.read_csv('data.tsv', sep='\t')
Excel 파일
# Excel 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# Excel 쓰기
df.to_excel('output.xlsx', index=False)
3. 데이터 탐색
기본 정보
# 처음 5행
print(df.head())
# 마지막 5행
print(df.tail())
# 기본 정보
print(df.info())
# 통계 요약
print(df.describe())
# 크기
print(df.shape) # (행, 열)
# 열 이름
print(df.columns)
4. 데이터 선택
열 선택
# 단일 열
ages = df['age']
# 여러 열
subset = df[['name', 'age']]
# 조건 필터링
adults = df[df['age'] >= 30]
seoul_users = df[df['city'] == '서울']
# 복합 조건
result = df[(df['age'] >= 25) & (df['city'] == '서울')]
행 선택
# 인덱스로 선택 (iloc)
first_row = df.iloc[0]
first_three = df.iloc[:3]
# 라벨로 선택 (loc)
df_indexed = df.set_index('name')
chul = df_indexed.loc['철수']
# 조건 선택
young = df[df['age'] < 30]
5. 데이터 조작
열 추가/삭제
# 열 추가
df['country'] = '한국'
df['birth_year'] = 2026 - df['age']
# 열 삭제
df = df.drop('country', axis=1)
# 여러 열 삭제
df = df.drop(['col1', 'col2'], axis=1)
값 변경
# 특정 값 변경
df.loc[df['name'] == '철수', 'age'] = 26
# 함수 적용
df['age_group'] = df['age'].apply(
lambda x: '청년' if x < 30 else '중년'
)
# 여러 열에 함수 적용
df[['age', 'birth_year']] = df[['age', 'birth_year']].applymap(int)
6. 그룹화와 집계
groupby
# 도시별 평균 나이
city_avg = df.groupby('city')['age'].mean()
print(city_avg)
# 여러 집계 함수
result = df.groupby('city').agg({
'age': ['mean', 'min', 'max'],
'name': 'count'
})
print(result)
7. 데이터 병합
merge (조인)
# 두 DataFrame 병합
df1 = pd.DataFrame({
'id': [1, 2, 3],
'name': ['철수', '영희', '민수']
})
df2 = pd.DataFrame({
'id': [1, 2, 4],
'score': [85, 90, 88]
})
# Inner Join
merged = pd.merge(df1, df2, on='id', how='inner')
print(merged)
# id name score
# 0 1 철수 85
# 1 2 영희 90
# Left Join
merged = pd.merge(df1, df2, on='id', how='left')
concat (연결)
# 세로로 연결
df_concat = pd.concat([df1, df2], ignore_index=True)
# 가로로 연결
df_concat = pd.concat([df1, df2], axis=1)
8. 실전 예제
판매 데이터 분석
import pandas as pd
# 데이터 로드
sales = pd.read_csv('sales.csv')
# 기본 정보
print(f"총 {len(sales)}건의 판매")
print(f"총 매출: {sales['amount'].sum():,}원")
# 월별 매출
sales['date'] = pd.to_datetime(sales['date'])
sales['month'] = sales['date'].dt.month
monthly_sales = sales.groupby('month')['amount'].sum()
print(monthly_sales)
# 상위 10개 상품
top_products = sales.groupby('product')['amount'].sum().sort_values(ascending=False).head(10)
print(top_products)
# 결과 저장
monthly_sales.to_csv('monthly_report.csv')
메모리·결측·중복을 다루는 짧은 패턴
DataFrame은 엑셀 시트를 코드로 다루는 표와 비슷합니다. 큰 CSV는 읽을 때부터 dtype을 줄여 메모리를 아끼으며, 결측과 중복은 분석 목적에 맞게 버릴지·채울지 먼저 정한 뒤 dropna·fillna·drop_duplicates로 일괄 처리합니다.
# ✅ 메모리 최적화
df = pd.read_csv('large.csv', dtype={'id': 'int32'})
# ✅ 결측치 처리
df = df.dropna() # 결측치 제거
df = df.fillna(0) # 0으로 채우기
# ✅ 중복 제거
df = df.drop_duplicates()
# ✅ 체이닝
result = (df
.query('age >= 25')
.groupby('city')['age']
.mean()
.sort_values(ascending=False)
)
정리
핵심 요약
- Pandas: 데이터 분석 라이브러리
- DataFrame: 2차원 테이블
- 읽기/쓰기: CSV, Excel, JSON
- 조작: 필터링, 그룹화, 병합
- 집계: sum, mean, count
다음 단계
관련 글
자주 묻는 질문 (FAQ)
Q. 이 내용을 실무에서 언제 쓰나요?
A. Pandas 기초: Python 데이터 분석 라이브러리 완벽 정리. Pandas 기본·데이터 읽기/쓰기로 흐름을 잡고 원리·코드·실무 적용을 한글로 정리합니다. Python·Pandas·데이터분석 중심으로 설명합니다… 실무에서는 위 본문의 예제와 선택 가이드를 참고해 적용하면 됩니다.
Q. 선행으로 읽으면 좋은 글은?
A. 각 글 하단의 이전 글 또는 관련 글 링크를 따라가면 순서대로 배울 수 있습니다. Python 시리즈 목차에서 전체 흐름을 확인할 수 있습니다.
Q. 더 깊이 공부하려면?
A. cppreference와 해당 라이브러리 공식 문서를 참고하세요. 글 말미의 참고 자료 링크도 활용하면 좋습니다.
같이 보면 좋은 글 (내부 링크)
이 주제와 연결되는 다른 글입니다.
- Flask 기초 | Python 웹 프레임워크 시작하기
- Python 예외 처리 | try-except, raise, 커스텀 예외 완벽 정리
- Python 데이터 전처리 | 결측치, 이상치, 정규화 완벽 정리
이 글에서 다루는 키워드 (관련 검색어)
Python, Pandas, 데이터분석, DataFrame, CSV, 데이터처리 등으로 검색하시면 이 글이 도움이 됩니다.