본문 바로가기
카테고리 없음

pandas 기초정리 (Series vs DataFrame 차이와 예제) – 데이터분석 뿐만 아니라, 모든 데이터 활용에 사용되는 만능 라이브러리

by 북더기 2025. 3. 27.

Python에서 데이터를 다룰 때 가장 많이 사용하는 라이브러리 중 하나가 바로 pandas입니다. 필자가 회사에서도 Python 코드를 종종 쓰곤 하는데, 가장 많이 쓰는 라이브러리 중 하나라고 할 수 있겠습니다. 데이터분석 뿐만 아니라, 어떤 분석과 어떤 기능을 사용했더라도 결과 데이터를 저장할 때 보통 pandas dataframe을 사용하여 저장하곤 하빈다. 그만큼 pandas는 표 형태의 데이터를 쉽게 다루기 위한 다양한 기능을 제공하며, 분석, 전처리, 시각화 등 거의 모든 데이터 작업에서 핵심 역할을 합니다. pandas는 크게 1차원 Series2차원 이상의 DataFrame이라는 두 가지 주요 데이터 구조를 제공합니다. 이번 글에서는 이 두 구조의 개념과 함께 간단한 예제를 통해 어떻게 활용하는지 알아보겠습니다.

1. 1차원 데이터: Series의 개념과 사용법

pandas에서 Series는 1차원 데이터를 표현하는 자료 구조입니다. Python의 리스트나 배열과 유사하지만, 각 데이터에 인덱스를 부여할 수 있다는 점에서 더 유용하다고 생각합니다 숫자, 문자열 등 단일 열의 데이터에 적합하며, 시간 데이터나 사용자 지정 인덱스를 지정하는 경우도 많습니다. 간단한 예제를 한번 살펴보겠습니다.

import pandas as pd

data = [10, 20, 30, 40]
series = pd.Series(data, index=['a', 'b', 'c', 'd'])

print(series)

위 코드를 실행하면 a부터 d까지 인덱스를 가진 값이 출력됩니다. pandas의 Series는 넘파이 배열처럼 연산도 쉽게 할 수 있고, 통계 함수도 바로 적용 가능합니다. 예를 들어 `series.mean()`을 사용하면 평균값을 바로 구할 수 있습니다. 또한, 조건을 걸어 필터링도 가능합니다. 예: `series[series > 20]`은 30과 40만 출력합니다. 이처럼 Series는 간단하면서도 유용한 1차원 데이터 구조입니다.

2. 2차원 이상의 데이터: DataFrame의 개념과 구조

pandas에서 가장 많이 사용되는 데이터 구조는 바로 DataFrame입니다. DataFrame은 행과 열이 있는 2차원 표 형식 데이터로, 엑셀 시트와 매우 유사한 구조입니다. 각 열은 Series로 구성되어 있으며, 서로 다른 데이터 타입도 함께 가질 수 있습니다. 예를 들어 숫자, 문자열, 날짜 등이 하나의 DataFrame 안에 들어갈 수 있습니다. 한번 간단한 예제를 통해 생성 방법을 살펴보겠습니다.

import pandas as pd

data = {
    '이름': ['김부기', '김철수', '이영희'],
    '나이': [25, 30, 22],
    '도시': ['서울', '부산', '대구']
}

df = pd.DataFrame(data)
print(df)

위 코드에서 딕셔너리를 사용해 DataFrame을 생성했습니다. 출력 결과는 이름, 나이, 도시로 구성된 표 형태가 됩니다. `df['이름']`처럼 특정 열을 선택하거나, `df.loc[0]`으로 특정 행을 조회할 수 있습니다. 또한 `df.describe()`를 통해 수치형 데이터의 요약 통계를 바로 확인할 수 있습니다. DataFrame은 데이터 필터링, 정렬, 그룹화 등 다양한 기능이 가능하여 실무에서도 가장 자주 사용됩니다.

3. Series와 DataFrame의 실용적 예제 비교

Series와 DataFrame은 구조만 다를 뿐, 유사한 방식으로 데이터를 다룰 수 있습니다. 하지만 처리 방식에 차이가 있으므로 실용적인 관점에서 어떻게 다르게 쓰이는지 비교해보겠습니다. 예를 들어 학생들의 시험 점수를 관리하는 경우, 단일 학생의 점수는 Series로 표현하고, 여러 학생의 점수를 하나의 표로 관리할 때는 DataFrame을 사용합니다. 아래 예제를 한번 볼까요?

# 단일 학생 점수 (Series)
import pandas as pd

scores = pd.Series([90, 85, 78], index=['국어', '영어', '수학'])
print("김부기 점수:\n", scores)

# 여러 학생 점수 (DataFrame)
data = {
    '국어': [90, 80, 70],
    '영어': [85, 75, 65],
    '수학': [78, 88, 92]
}
students = pd.DataFrame(data, index=['김부기', '김철수', '이영희'])
print("\n전체 학생 점수:\n", students)

Series는 한 명의 과목별 점수를 잘 나타내고, DataFrame은 전체 학생의 점수를 한눈에 보여줍니다. 또한 DataFrame에서는 `students.mean(axis=1)`을 통해 학생별 평균을 계산하거나, `students['수학'].max()`로 수학 최고 점수를 쉽게 구할 수 있겠습니다. 또한 이러한 비교를 통해 상황에 맞는 데이터 구조를 선택하는 것이 중요합니다. pandas의 Series와 DataFrame을 자유롭게 다루게 되면, 데이터 분석의 기본을 튼튼히 다질 수 있습니다. 또한 크롤링한 데이터의 수집, LLM으로 처리한 결과에 대한 데이터프레임화 등에 pandas 라이브러리는 항상 유용하게 사용되어 사용가능 범위가 넓은 라이브러리이니 많은 활용이 될 수록 이득이 큰 기능입니다.