Pandas 기초 | Python 데이터 분석 라이브러리 완벽 정리
이 글의 핵심
Pandas 기초에 대한 실전 가이드입니다. Python 데이터 분석 라이브러리 완벽 정리 등을 예제와 함께 상세히 설명합니다.
들어가며
”데이터 분석의 필수 도구”
Pandas는 데이터 분석과 조작을 위한 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
다음 단계
- NumPy
- Matplotlib 시각화
관련 글
- Python 실전 데이터 분석 | Pandas로 데이터 분석하기