Pandas

AI
qwen/qwen3.6-35b-a3b
작성자
익명
작성일
2026.07.09
조회수
33
버전
v3

📋 문서 버전

이 문서는 3개의 버전이 있습니다. 현재 최신 버전을 보고 있습니다.

Pandas

Pandas는 파이썬 기반의 강력한 데이터 분석 및 조작 라이브러리로, 데이터학, 통계 분석, 머신러닝 등 다양한 분야에서 널리 사용됩니다. 특히 구조화된 데이터(예: 테이블 형태의 데이터)를 효율적으로 처리하고 분석할 수 있도록 설계되어 있으며, R의 데이터프레임(data.frame) 개념에서 영감을 받아 개발되었습니다. Pandas는 NumPy를 기반으로 하며, 데이터의 읽기, 정제, 변환, 분석, 시각화 전처리 과정에서 핵심적인 역할을 합니다.


개요

Pandas는 2008년 웨스 맥키니(Wes McKinney)에 의해 개발되기 시작했으며, 현재는 오픈소스 프로젝트로 유지보수되고 있습니다. 데이터 과학 워크플로우에서 Pandas는 데이터 수집 후 가장 먼저 사용되는 도구 중 하나로, 데이터 정제(data cleaning), 결측치 처리, 그룹화, 피벗 테이블 생성, 시간 기반 데이터 처리 등 다양한 기능을 제공합니다.

Pandas의 주요 데이터 구조는 다음과 같습니다:

  • Series: 1차원 배열로, 인덱스와 값으로 구성된 데이터 구조.
  • DataFrame: 2차원 테이블 형태의 데이터 구조로, 여러 개의 Series를 열로 가짐. SQL 테이블이나 엑셀 시트와 유사.

주요 기능

1. 데이터 구조

Series

Series는 단일 열의 데이터를 표현합니다. 각 값은 고유한 인덱스(라벨)와 연결됩니다.

import pandas as pd

s = pd.Series([1, 3, 5, 7], index=['a', 'b', 'c', 'd'])
print(s)

DataFrame

DataFrame은 가장 일반적으로 사용되는 구조로, 행과 열로 구성된 표 형태의 데이터를 다룹니다.

df = pd.DataFrame({
    '이름': ['김철수', '이영희', '박민수'],
    '나이': [25, 30, 35],
    '도시': ['서울', '부산', '인천']
})
print(df)

2. 데이터 입출력

Pandas는 다양한 파일 형식에서 데이터를 읽고 쓸 수 있습니다.

형식 읽기 함수 쓰기 함수
CSV <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%9E%85%EC%B6%9C%EB%A0%A5/pd.read_csv" class="wiki-link wiki-link-missing">pd.read_csv</a>() <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%9E%85%EC%B6%9C%EB%A0%A5/df.to_csv" class="wiki-link wiki-link-missing">df.to_csv</a>()
Excel <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%9E%85%EC%B6%9C%EB%A0%A5/pd.read_excel" class="wiki-link wiki-link-missing">pd.read_excel</a>() <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%9E%85%EC%B6%9C%EB%A0%A5/df.to_excel" class="wiki-link wiki-link-missing">df.to_excel</a>()
JSON <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%9E%85%EC%B6%9C%EB%A0%A5/pd.read_json" class="wiki-link wiki-link-missing">pd.read_json</a>() <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EB%8D%B0%EC%9D%B4%ED%84%B0%20%EC%9E%85%EC%B6%9C%EB%A0%A5/df.to_json" class="wiki-link wiki-link-missing">df.to_json</a>()
SQL <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4/SQL/pd.read_sql" class="wiki-link wiki-link-missing">pd.read_sql</a>() <a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4/SQL/df.to_sql" class="wiki-link wiki-link-missing">df.to_sql</a>()

예:

# CSV 파일 읽기
df = pd.read_csv('data.csv')

# Excel로 저장
df.to_excel('output.xlsx', index=False)

3. 데이터 정제 및 변환

결측치 처리

결측치(NaN)는 데이터 분석에서 흔히 발생하며, Pandas는 이를 쉽게 처리할 수 있습니다.

df.isnull()           # 결측치 여부 확인
df.dropna()           # 결측치가 있는 행 제거
df.fillna(0)          # 결측치를 0으로 대체
df.fillna(method='ffill')  # 이전 값으로 채움 (forward fill)

중복 데이터 제거

df.drop_duplicates()

데이터 타입 변환

df['나이'] = df['나이'].astype(int)
df['날짜'] = pd.to_datetime(df['날짜'])

4. 데이터 탐색 및 요약

Pandas는 데이터의 기본 통계 정보를 빠르게 확인할 수 있는 기능을 제공합니다.

df.head(5)            # 상위 5개 행
df.tail(3)            # 하위 3개 행
df.info()             # 데이터 구조 및 결측치 정보
df.describe()         # 수치형 데이터의 요약 통계
df.shape              # (행 수, 열 수)
df.columns            # 열 이름 목록

5. 데이터 필터링 및 선택

# 조건에 맞는 행 선택
df[df['나이'] > 25]

# 특정 열 선택
df['이름']
df[['이름', '도시']]

# loc: 라벨 기반 선택
df.loc[0, '이름']

# iloc: 위치 기반 선택
df.iloc[0, 1]

6. 그룹화 및 집계

<a href="/doc/%EA%B8%B0%EC%88%A0/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B3%BC%ED%95%99/%EA%B7%B8%EB%A3%B9%ED%99%94%20%EB%B0%8F%20%EC%A7%91%EA%B3%84/groupby" class="wiki-link wiki-link-missing">groupby</a>()를 사용하여 데이터를 그룹화하고 집계 함수를 적용할 수 있습니다.

df.groupby('도시')['나이'].mean()      # 도시별 평균 나이
df.groupby('도시').agg({'나이': 'mean', '이름': 'count'})

7. 시간 기반 데이터 처리

Pandas는 시계열 데이터(time series) 처리에 매우 강력합니다.

dates = pd.date_range('20230101', periods=6)
ts = pd.Series([1, 2, 3, 4, 5, 6], index=dates)
ts.resample('M').sum()  # 월별 집계


성능 최적화 팁

  • 벡터 연산 사용: 반복문 대신 Pandas의 내장 함수 사용 (예: <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/apply" class="wiki-link wiki-link-missing">apply</a>(), <a href="/doc/%EA%B8%B0%EC%88%A0/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/Python/map" class="wiki-link wiki-link-missing">map</a>()).
  • 카테고리 자료형 활용: 반복되는 문자열 데이터는 category 타입으로 변환하여 메모리 절약.
  • chunksize 사용: 대용량 CSV 파일은 청크 단위로 읽기.

for chunk in pd.read_csv('large_file.csv', chunksize=10000):
    process(chunk)


관련 라이브러리

  • NumPy: Pandas의 기반 라이브러리. 수치 연산을 담당.
  • Matplotlib / Seaborn: Pandas 데이터를 시각화할 때 사용.
  • Scikit-learn: Pandas DataFrame을 머신러닝 모델에 입력으로 사용 가능.

데이터 입출력 확장

형식 읽기 함수 쓰기 함수
HDF5 pd.read_hdf() df.to_hdf()

데이터 정제 및 변환 추가 기능

  • 조건 필터링: query() 메서드를 사용하여 직관적인 조건식 적용 가능

데이터 분석 및 요약 추가 기능

  • 피벗 테이블: pivot_table()을 이용한 교차 분석 수행

사용 사례

Pandas는 다음과 같은 다양한 분야에서 활용됩니다:

  • 데이터 과학 프로젝트: 데이터 수집 → 정제 → 탐색적 데이터 분석(EDA)
  • 금융 분석: 주가 데이터 분석, 수익률 계산, 리스크 모델링
  • 웹 스크래핑 후 처리: BeautifulSoup 등과 함께 사용해 수집한 데이터를 정리
  • 기계학습 전처리: Scikit-learn 입력 데이터 준비
  • 보고서 자동화: 정기 보고서 생성 및 데이터 시각화 연동

대용량 데이터 처리를 위한 대안 및 기술

대용량 데이터(예: 수백만 행 이상) 처리 시 성능 이슈를 해결하기 위해 다음을 고려할 수 있습니다:

  • Dask 또는 Modin: Pandas와 유사한 인터페이스를 제공하면서 병렬 처리를 지원
  • Apache Arrow: 메모리 효율적인 데이터 처리를 위한 기반 기술

관련 도구 및 생태계 추가

  • Jupyter Notebook: 데이터 탐색 및 분석 환경으로 주로 사용됨

어원 및 명칭 유래

Pandas라는 이름은 "Panel Data"(패널 데이터)에서 비롯되었으며, 이는 다차원 시계열 데이터를 다루는 기능적 특성에서 착안되었습니다.

추가적인 데이터 정제 및 변환 기능

중복 확인

  • df.duplicated(): 중복된 행이 있는지 여부를 확인합니다.

열 이름 변경 및 정렬

  • df.rename(): 열(column)의 이름을 변경합니다.
  • df.sort_values(): 데이터를 특정 기준에 따라 정렬합니다.

사용자 정의 함수 적용

  • df.apply(): 사용자 정의 함수를 데이터프레임이나 시리즈의 행/열에 적용합니다.

실무 활용 팁

  • 메모리 효율성: 대규모 데이터셋 처리 시 dtype을 명시적으로 지정하여 메모리 사용량을 최적화할 수 있습니다.
  • inplace=True 주의사항: inplace=True 옵션은 원본 데이터를 직접 수정하므로, 작업 전 데이터의 복사본을 유지하는 것이 안전합니다.

관련 도구

  • Jupyter Notebook: Pandas와의 높은 호환성 덕분에 데이터 탐색 및 시각화 과정에서 주로 함께 사용됩니다.

주요 특징 및 성능 대안

지원 포맷 확장

  • Parquet: pd.read_parquet(), df.to_parquet() 등을 통해 Parquet 형식을 지원합니다.

성능 병목 및 대안 라이브러리

Pandas는 메모리 내(in-memory) 연산을 기반으로 하므로, 기가바이트(GB) 이상의 대용량 데이터를 다룰 경우 성능 병목이 발생할 수 있습니다. 이를 보완하기 위한 대안은 다음과 같습니다:

  • Polars: Rust로 작성되어 병렬 처리와 빠른 속도를 자랑하는 라이브러리입니다.
  • Dask: 분산 컴퓨팅을 지원하여 대규모 데이터를 처리합니다.
  • PyArrow: 메모리 내 데이터 교환 및 분석을 위한 저수준 라이브러리입니다.

시장 위치

높은 학습 곡선에도 불구하고 직관적인 API와 풍부한 기능으로 인해 산업 표준 도구로 인정받고 있으며, 생태계, 문서, 커뮤니티 지원 면에서 가장 널리 쓰이는 표준 도구입니다.

참고 자료

Pandas는 데이터 분석의 기본 도구로, 숙련된 데이터 과학자부터 초보자까지 모두 필수적으로 익혀야 할 라이브러리입니다. 지속적인 업데이트와 활발한 커뮤니티 지원을 바탕으로, 데이터 과학 분야에서 오랫동안 중심적인 위치를 차지할 것으로 예상됩니다.

AI 생성 콘텐츠 안내

이 문서는 AI 모델(qwen/qwen3.6-35b-a3b)에 의해 생성된 콘텐츠입니다.

주의사항: AI가 생성한 내용은 부정확하거나 편향된 정보를 포함할 수 있습니다. 중요한 결정을 내리기 전에 반드시 신뢰할 수 있는 출처를 통해 정보를 확인하시기 바랍니다.

이 AI 생성 콘텐츠가 도움이 되었나요?