본문 바로가기
파이썬

Pandas란? 데이터 분석을 위한 파이썬 라이브러리 완벽 가이드

by devcomet 2025. 8. 11.
728x90
반응형

Pandas Python library data analysis tutorial guide illustration
Pandas란? 데이터 분석을 위한 파이썬 라이브러리 완벽 가이드

 

Pandas Python 라이브러리 설치부터 데이터프레임, 시리즈 활용법까지 데이터 분석 완벽 가이드 - 실무 예제와 함께 배우는 판다스 사용법


Pandas 소개와 기본 개념

Pandas 소개와 기본 개념 이미지

 

Pandas는 파이썬에서 가장 널리 사용되는 데이터 분석 라이브러리입니다.

NumPy를 기반으로 구축된 이 강력한 파이썬 라이브러리는 구조화된 데이터를 효율적으로 조작하고 분석할 수 있는 도구를 제공합니다.

특히 CSV 파일이나 엑셀 데이터를 다룰 때 그 진가를 발휘하며, 데이터 클리닝부터 복잡한 데이터 가공까지 모든 과정을 지원합니다.

판다스의 핵심은 두 가지 주요 데이터 구조인 SeriesDataFrame에 있습니다.

이 구조들은 관계형 데이터베이스의 테이블과 유사한 방식으로 데이터를 저장하고 처리할 수 있게 해줍니다.


Pandas 설치 및 환경 설정

기본 설치 방법

# pip를 사용한 설치
pip install pandas

# conda를 사용한 설치
conda install pandas

의존성 패키지 함께 설치하기

# 데이터 분석에 필요한 전체 패키지 설치
pip install pandas numpy matplotlib seaborn openpyxl

설치가 완료되면 다음과 같이 임포트하여 사용할 수 있습니다

import pandas as pd
import numpy as np

Python 공식 문서에서 더 자세한 설치 방법을 확인할 수 있습니다.


Pandas 핵심 데이터 구조

Series - 1차원 데이터 구조

Series는 인덱스가 있는 1차원 배열로, 파이썬의 리스트나 딕셔너리와 유사하지만 더 강력한 기능을 제공합니다.

# Series 생성 예제
import pandas as pd

# 리스트로부터 Series 생성
data = [10, 20, 30, 40, 50]
series = pd.Series(data, index=['a', 'b', 'c', 'd', 'e'])
print(series)

 

실행 결과

a    10
b    20
c    30
d    40
e    50
dtype: int64

 

Series의 주요 특징

  • 인덱스 레이블을 통한 데이터 접근
  • 벡터화된 연산 지원
  • 결측값 처리 기능

DataFrame - 2차원 데이터 구조

데이터프레임은 pandas의 핵심 구조로, 행과 열로 구성된 2차원 테이블입니다.

엑셀 스프레드시트나 SQL 테이블과 같은 구조를 가지고 있어 직관적으로 사용할 수 있습니다.

# DataFrame 생성 예제
data = {
    '이름': ['김철수', '이영희', '박민수'],
    '나이': [25, 30, 35],
    '도시': ['서울', '부산', '대구']
}
df = pd.DataFrame(data)
print(df)

 

실행 결과

    이름  나이  도시
0  김철수  25  서울
1  이영희  30  부산
2  박민수  35  대구

데이터 불러오기와 저장하기

CSV 파일 다루기

 

CSV 불러오기는 데이터 분석의 가장 기본적인 작업입니다.

# CSV 파일 읽기
df = pd.read_csv('data.csv', encoding='utf-8')

# 옵션 설정을 통한 고급 읽기
df = pd.read_csv('data.csv', 
                 sep=',',           # 구분자 설정
                 index_col=0,       # 첫 번째 열을 인덱스로 사용
                 na_values=['NA', 'null'])  # 결측값 처리

# CSV 파일로 저장
df.to_csv('output.csv', index=False, encoding='utf-8')

엑셀 파일 처리

엑셀 데이터 분석도 pandas로 쉽게 수행할 수 있습니다:

# 엑셀 파일 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# 여러 시트 읽기
excel_data = pd.read_excel('data.xlsx', sheet_name=None)

# 엑셀 파일로 저장
df.to_excel('output.xlsx', sheet_name='결과', index=False)

데이터 탐색과 기본 정보 확인

데이터 탐색과 기본 정보 확인 이미지

데이터 구조 파악하기

# 기본 정보 확인
print(df.info())        # 데이터 타입과 결측값 정보
print(df.describe())    # 기본 통계 정보
print(df.shape)         # 데이터프레임 크기
print(df.columns)       # 컬럼명 확인

 

실행 결과

# df.info() 결과
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   이름      3 non-null      object
 1   나이      3 non-null      int64 
 2   도시      3 non-null      object
dtypes: int64(1), object(2)

# df.describe() 결과
             나이
count   3.000000
mean   30.000000
std     5.000000
min    25.000000
25%    27.500000
50%    30.000000
75%    32.500000
max    35.000000

# df.shape 결과
(3, 3)

# df.columns 결과
Index(['이름', '나이', '도시'], dtype='object')

데이터 미리보기

# 상위 데이터 확인
df.head(10)    # 상위 10개 행

# 하위 데이터 확인
df.tail(5)     # 하위 5개 행

# 무작위 샘플링
df.sample(n=10)  # 무작위 10개 행

 

실행 결과

# df.head() 결과
    이름  나이  도시
0  김철수  25  서울
1  이영희  30  부산
2  박민수  35  대구

# df.tail() 결과
    이름  나이  도시
0  김철수  25  서울
1  이영희  30  부산
2  박민수  35  대구

Pandas 공식 문서에서 더 많은 함수들을 살펴보실 수 있습니다.


데이터 선택과 인덱싱

pandas 데이터 선택과 인덱싱 설명 이미지

 

컬럼 선택하기

# 단일 컬럼 선택
print(df['이름'])

# 여러 컬럼 선택
print(df[['이름', '나이']])

# 조건부 선택
print(df[df['나이'] > 25])

 

실행 결과

# df['이름'] 결과
0    김철수
1    이영희
2    박민수
Name: 이름, dtype: object

# df[['이름', '나이']] 결과
    이름  나이
0  김철수  25
1  이영희  30
2  박민수  35

# df[df['나이'] > 25] 결과
    이름  나이  도시
1  이영희  30  부산
2  박민수  35  대구

행과 열 동시 선택

# .loc를 사용한 레이블 기반 선택
df.loc[0:2, '이름':'나이']

# .iloc를 사용한 위치 기반 선택
df.iloc[0:3, 0:2]

고급 필터링 기법

Pandas 필터링은 복잡한 조건도 쉽게 처리할 수 있습니다:

# 복합 조건 필터링
filtered_df = df[(df['나이'] >= 25) & (df['도시'] == '서울')]
print(filtered_df)

# isin() 메서드를 활용한 필터링
cities = ['서울', '부산']
city_df = df[df['도시'].isin(cities)]
print(city_df)

# 문자열 패턴 매칭
name_pattern = df[df['이름'].str.contains('김')]
print(name_pattern)

 

실행 결과

# 복합 조건 필터링 결과
    이름  나이  도시
0  김철수  25  서울

# isin() 필터링 결과
    이름  나이  도시
0  김철수  25  서울
1  이영희  30  부산

# 문자열 패턴 매칭 결과
    이름  나이  도시
0  김철수  25  서울

데이터 정렬과 정리

pandas 데이터 정렬과 정리 이미지

데이터 정렬하기

Pandas 정렬 기능을 통해 데이터를 체계적으로 구성할 수 있습니다

# 단일 컬럼 기준 정렬
df_sorted = df.sort_values('나이')
print(df_sorted)

# 여러 컬럼 기준 정렬
df_multi_sort = df.sort_values(['도시', '나이'], ascending=[True, False])
print(df_multi_sort)

# 인덱스 기준 정렬
df_index_sort = df.sort_index()
print(df_index_sort)

 

실행 결과

# 단일 컬럼 정렬 결과
    이름  나이  도시
0  김철수  25  서울
1  이영희  30  부산
2  박민수  35  대구

# 여러 컬럼 정렬 결과
    이름  나이  도시
2  박민수  35  대구
1  이영희  30  부산
0  김철수  25  서울

# 인덱스 정렬 결과
    이름  나이  도시
0  김철수  25  서울
1  이영희  30  부산
2  박민수  35  대구

데이터 클리닝

결측값과 중복값 처리는 데이터 분석의 필수 과정입니다:

# 결측값 확인
df.isnull().sum()

# 결측값 제거
df_clean = df.dropna()

# 결측값 채우기
df_filled = df.fillna(df.mean())

# 중복값 제거
df_unique = df.drop_duplicates()

그룹화와 집계 연산

GroupBy 기본 사용법

GroupBy는 pandas의 강력한 기능 중 하나로, 데이터를 그룹별로 분석할 수 있게 해줍니다

# 도시별 그룹화
city_groups = df.groupby('도시')

# 그룹별 평균
city_avg = df.groupby('도시')['나이'].mean()

# 여러 통계량 계산
city_stats = df.groupby('도시')['나이'].agg(['mean', 'std', 'count'])

고급 그룹화 기법

# 여러 컬럼 기준 그룹화
multi_group = df.groupby(['도시', '연령대'])['소득'].sum()

# 사용자 정의 함수 적용
def age_category(age):
    if age < 30:
        return '청년'
    elif age < 50:
        return '중년'
    else:
        return '장년'

df['연령대'] = df['나이'].apply(age_category)
age_group_analysis = df.groupby('연령대').size()

데이터 결합과 병합

pandas 데이터 결합과 병합 정리 이미지

DataFrame 합치기

여러 데이터소스를 결합하는 것은 실무에서 매우 중요한 작업입니다

메서드 기능 사용 예시
merge SQL 스타일 조인 pd.merge(df1, df2, on='키')
concat 단순 연결 pd.concat([df1, df2])
join 인덱스 기준 결합 df1.join(df2)

 

# merge를 사용한 결합
df1 = pd.DataFrame({'ID': [1, 2, 3], '이름': ['A', 'B', 'C']})
df2 = pd.DataFrame({'ID': [1, 2, 4], '점수': [90, 85, 88]})

# 내부 조인
inner_merged = pd.merge(df1, df2, on='ID', how='inner')
print("내부 조인 결과:")
print(inner_merged)

# 왼쪽 조인
left_merged = pd.merge(df1, df2, on='ID', how='left')
print("\n왼쪽 조인 결과:")
print(left_merged)

 

실행 결과

내부 조인 결과:
   ID 이름  점수
0   1  A  90
1   2  B  85

왼쪽 조인 결과:
   ID 이름   점수
0   1  A  90.0
1   2  B  85.0
2   3  C   NaN

Concat을 활용한 데이터 연결

# 행 기준 연결
row_concat = pd.concat([df1, df2], ignore_index=True)

# 열 기준 연결
col_concat = pd.concat([df1, df2], axis=1)

실무 활용 예제

매출 데이터 분석 시나리오

실제 비즈니스 상황을 가정한 pandas 예제를 살펴보겠습니다

# 샘플 매출 데이터 생성
import numpy as np
sales_data = {
    '날짜': pd.date_range('2024-01-01', periods=10),
    '제품': np.random.choice(['A', 'B', 'C'], 10),
    '매출액': np.random.randint(1000, 5000, 10),
    '지역': np.random.choice(['서울', '부산', '대구'], 10)
}
sales_df = pd.DataFrame(sales_data)
print("매출 데이터 샘플:")
print(sales_df.head())

# 월별 매출 분석
sales_df['월'] = sales_df['날짜'].dt.month
monthly_sales = sales_df.groupby('월')['매출액'].sum()
print("\n월별 매출:")
print(monthly_sales)

# 제품별 성과 분석
product_performance = sales_df.groupby('제품').agg({
    '매출액': ['sum', 'mean', 'count']
}).round(2)
print("\n제품별 성과:")
print(product_performance)

 

실행 결과 (예시)

매출 데이터 샘플:
        날짜 제품  매출액  지역
0 2024-01-01  B  3421  서울
1 2024-01-02  A  1234  부산
2 2024-01-03  C  4567  대구
3 2024-01-04  A  2890  서울
4 2024-01-05  B  3456  부산

월별 매출:
월
1    28945
dtype: int64

제품별 성과:
    매출액              
      sum    mean count
제품                   
A   12456  3114.0     4
B   15678  3135.6     5
C    8901  8901.0     1

고객 세그멘테이션

# 고객 구매 패턴 분석
customer_analysis = sales_df.groupby(['지역', '제품']).agg({
    '매출액': 'sum',
    '날짜': 'count'
}).rename(columns={'날짜': '구매횟수'})

# 상위 고객 식별
top_regions = customer_analysis.sort_values('매출액', ascending=False).head(10)

고급 Pandas 함수와 메서드

데이터 변환과 매핑

# apply 함수를 활용한 데이터 변환
df['나이_카테고리'] = df['나이'].apply(lambda x: '청년' if x < 30 else '장년')

# map 함수를 활용한 값 매핑
grade_mapping = {90: 'A', 80: 'B', 70: 'C'}
df['등급'] = df['점수'].map(grade_mapping)

시계열 데이터 처리

# 날짜 인덱스 설정
df['날짜'] = pd.to_datetime(df['날짜'])
df.set_index('날짜', inplace=True)

# 리샘플링 (월별 집계)
monthly_data = df.resample('M')['매출액'].sum()

# 이동평균 계산
df['이동평균'] = df['매출액'].rolling(window=7).mean()

성능 최적화와 모범 사례

메모리 효율적인 데이터 처리

대용량 데이터를 다룰 때는 메모리 관리가 중요합니다:

# 데이터 타입 최적화
df['범주형_컬럼'] = df['범주형_컬럼'].astype('category')

# 청크 단위로 큰 파일 읽기
chunk_list = []
for chunk in pd.read_csv('large_file.csv', chunksize=1000):
    processed_chunk = chunk.groupby('category').sum()
    chunk_list.append(processed_chunk)
result = pd.concat(chunk_list, ignore_index=True)

벡터화 연산 활용

# 반복문 대신 벡터화 연산 사용 (권장)
df['새컬럼'] = df['A'] * df['B'] + df['C']

# 조건부 할당
df['등급'] = np.where(df['점수'] >= 90, 'A', 
             np.where(df['점수'] >= 80, 'B', 'C'))

NumPy 공식 문서에서 벡터화 연산에 대해 더 자세히 알아볼 수 있습니다.


데이터 시각화와의 연동

pandas 데이터 시각화와의 연동 이미지

 

Pandas는 matplotlib과 seaborn과 완벽하게 연동되어 데이터 시각화를 지원합니다

import matplotlib.pyplot as plt
import seaborn as sns

# 간단한 플롯
df['매출액'].plot(kind='hist', bins=20)

# 그룹별 시각화
df.groupby('지역')['매출액'].sum().plot(kind='bar')

# 상관관계 히트맵
correlation_matrix = df.corr()
sns.heatmap(correlation_matrix, annot=True)

문제 해결과 디버깅

자주 발생하는 오류와 해결책

오류 유형 원인 해결 방법
KeyError 존재하지 않는 컬럼 접근 df.columns로 컬럼명 확인
IndexError 인덱스 범위 초과 df.shape로 크기 확인
ValueError 데이터 타입 불일치 df.dtypes로 타입 확인 후 변환

데이터 품질 검증

# 데이터 품질 체크 함수
def data_quality_check(df):
    print(f"데이터 크기: {df.shape}")
    print(f"결측값 비율: {df.isnull().sum() / len(df) * 100}")
    print(f"중복값 개수: {df.duplicated().sum()}")
    print(f"데이터 타입:\n{df.dtypes}")

data_quality_check(df)

 

실행 결과

데이터 크기: (3, 3)
결측값 비율: 이름    0.0
나이    0.0
도시    0.0
dtype: float64
중복값 개수: 0
데이터 타입:
이름    object
나이     int64
도시    object
dtype: object

마치며

Pandas는 파이썬 데이터 분석의 핵심 도구로, 데이터 처리부터 분석까지 모든 과정을 효율적으로 수행할 수 있게 해줍니다.

이 가이드에서 다룬 pandas 사용법, pandas 함수, pandas 메서드들을 실무에 적용하면 더욱 전문적인 데이터 분석이 가능할 것입니다.

계속해서 pandas python 라이브러리의 새로운 기능들을 학습하고, 다양한 pandas 예제를 통해 실력을 향상시켜 나가시길 권합니다.

데이터 분석 여정에서 이 pandas 완벽 가이드가 도움이 되기를 바랍니다.

Pandas 커뮤니티에서 더 많은 정보와 최신 업데이트를 확인하실 수 있습니다.


함께 읽으면 좋은 글

 

Python 자료구조 완벽 가이드: 리스트, 딕셔너리, 셋 실무 성능 최적화 전략

Python 리스트, 딕셔너리, 셋의 시간복잡도 최적화를 통해 대용량 데이터 처리 성능을 300% 향상시키고 메모리 사용량을 50% 절감하는 실전 가이드를 제공합니다.Python 자료구조 선택은 단순한 문법

notavoid.tistory.com

 

 

Python asyncio로 동시성 프로그래밍 마스터하기

현대 웹 개발과 데이터 처리에서 성능 최적화는 필수불가결한 요소입니다.특히 파이썬 asyncio 비동기 프로그래밍은 I/O 집약적인 작업을 효율적으로 처리하는 핵심 기술로 자리잡았습니다.이 글

notavoid.tistory.com

 

 

FastAPI로 고성능 REST API 만들기 - Flask 대안 탐색

FastAPI는 파이썬 웹 프레임워크 생태계에서 혁신적인 변화를 가져온 모던 프레임워크입니다.Flask보다 더 빠르고 직관적인 개발 경험을 제공하는 FastAPI는 REST API 개발에 최적화된 특징들을 갖추고

notavoid.tistory.com

 

728x90
반응형