[2026] Pandas 기초 | Python 데이터 분석 라이브러리 완벽 정리

[2026] 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입니다. 다음은 python를 활용한 상세한 구현 코드입니다. 필요한 모듈을 import하고. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

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 파일

아래 코드는 python를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 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 파일

아래 코드는 python를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# Excel 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
# Excel 쓰기
df.to_excel('output.xlsx', index=False)

3. 데이터 탐색

기본 정보

다음은 python를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 처음 5행
print(df.head())
# 마지막 5행
print(df.tail())
# 기본 정보
print(df.info())
# 통계 요약
print(df.describe())
# 크기
print(df.shape)  # (행, 열)
# 열 이름
print(df.columns)

4. 데이터 선택

열 선택

아래 코드는 python를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 단일 열
ages = df['age']
# 여러 열
subset = df[['name', 'age']]
# 조건 필터링
adults = df[df['age'] >= 30]
seoul_users = df[df['city'] == '서울']
# 복합 조건
result = df[(df['age'] >= 25) & (df['city'] == '서울')]

행 선택

아래 코드는 python를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 인덱스로 선택 (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. 데이터 조작

열 추가/삭제

아래 코드는 python를 사용한 구현 예제입니다. 에러 처리를 통해 안정성을 확보합니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# 열 추가
df['country'] = '한국'
df['birth_year'] = 2026 - df['age']
# 열 삭제
df = df.drop('country', axis=1)
# 여러 열 삭제
df = df.drop(['col1', 'col2'], axis=1)

값 변경

아래 코드는 python를 사용한 구현 예제입니다. 반복문으로 데이터를 처리합니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 특정 값 변경
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

아래 코드는 python를 사용한 구현 예제입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 도시별 평균 나이
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 (조인)

다음은 python를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# 두 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 (연결)

아래 코드는 python를 사용한 구현 예제입니다. 코드를 직접 실행해보면서 동작을 확인해보세요.

# 세로로 연결
df_concat = pd.concat([df1, df2], ignore_index=True)
# 가로로 연결
df_concat = pd.concat([df1, df2], axis=1)

8. 실전 예제

판매 데이터 분석

다음은 python를 활용한 상세한 구현 코드입니다. 필요한 모듈을 import하고. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

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로 일괄 처리합니다. 다음은 python를 활용한 상세한 구현 코드입니다. 각 부분의 역할을 이해하면서 코드를 살펴보시기 바랍니다.

# ✅ 메모리 최적화
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)
)

일상 비유로 이해하기: 메모리를 아파트 건물로 생각해보세요. 스택은 엘리베이터 같아서 빠르지만 공간이 제한적입니다. 힙은 창고처럼 넓지만 물건을 찾는 데 시간이 걸립니다. 포인터는 “3층 302호”처럼 주소를 가리키는 메모지라고 보면 됩니다.

정리

핵심 요약

  1. Pandas: 데이터 분석 라이브러리
  2. DataFrame: 2차원 테이블
  3. 읽기/쓰기: CSV, Excel, JSON
  4. 조작: 필터링, 그룹화, 병합
  5. 집계: sum, mean, count

다음 단계


관련 글

... 996 lines not shown ... Token usage: 63706/1000000; 936294 remaining Start-Sleep -Seconds 3