인덱스,시리즈,데이터프레임

topics
types
tags
#pandas #index #series #dataframe
references

인덱스, 시리즈, 데이터프레임

기본 개념 정리

구분 설명 구조 예시
인덱스(Index) 행(또는 열)을 식별하는 라벨(label) 1차원 라벨 [0, 1, 2] 또는 ['a', 'b', 'c']
시리즈(Series) 1차원 데이터 구조 (값 + 인덱스) 1차원 0: 10, 1: 20, 2: 30
데이터프레임(DataFrame) 2차원 데이터 구조 (시리즈 여러 개) 2차원(표) 행과 열이 있는 엑셀 같은 테이블

인덱스 (Index)

데이터의 각 행(또는 열)을 식별하는 역할을 하는 라벨이다.

특징

  • 시리즈와 데이터프레임 모두 인덱스를 가진다
  • 정수, 문자열, 날짜 등 다양한 형태 가능
  • 데이터를 담지 않고, 식별·정렬·슬라이싱에 사용

예시

import pandas as pd

# 인덱스 예시
idx = pd.Index([0, 1, 2])  # 정수 인덱스
idx = pd.Index(['a', 'b', 'c'])  # 문자열 인덱스
idx = pd.DatetimeIndex(['2024-01-01', '2024-01-02'])  # 날짜 인덱스

시리즈 (Series)

1차원 데이터 구조로, 값과 인덱스로 구성된다.

왜 리스트 대신 시리즈를 쓸까?

리스트

  • 값만 저장
  • 순서로만 접근 (list[0])

시리즈

  • 값 + 라벨(인덱스) 저장
  • 라벨로 접근 가능 (series['a'])
  • 벡터 연산 지원

딕셔너리처럼 key-value 구조로도 볼 수 있지만, 순서가 있고 벡터 연산이 가능하다는 게 다르다.

시리즈 생성

# 리스트로 생성
s = pd.Series([10, 20, 30])
print(s)
# 0    10
# 1    20
# 2    30

# 인덱스 지정
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
# a    10
# b    20
# c    30

# 딕셔너리로 생성
s = pd.Series({'a': 10, 'b': 20, 'c': 30})

시리즈 → 데이터프레임 변환

s = pd.Series(
    ['4 cups', '1 cup', '2 large', '1 can'],
    index=['Flour', 'Milk', 'Eggs', 'Spam'],
    name='Dinner'  # 이게 컬럼명이 됨
)

df = s.to_frame()
print(df)
#        Dinner
# Flour  4 cups
# Milk   1 cup
# Eggs   2 large
# Spam   1 can

name 파라미터: 시리즈에 이름을 주면, 데이터프레임으로 변환할 때 컬럼명이 된다.


데이터프레임 (DataFrame)

2차원 데이터 구조로, 여러 개의 시리즈(열)가 모여서 만들어진다.

왜 필요한가?

엑셀 스프레드시트나 SQL 테이블 같은 구조

  • 행과 열 모두 인덱스(라벨)를 가진다
  • 각 열은 서로 다른 데이터 타입 가능
  • 데이터 분석의 기본 단위

데이터프레임 생성

# 딕셔너리로 생성
df = pd.DataFrame({
    'Apples': [30, 41],
    'Bananas': [21, 34]
})
print(df)
#    Apples  Bananas
# 0      30       21
# 1      41       34

# 인덱스 지정
df.index = ['2017 Sales', '2018 Sales']
print(df)
#             Apples  Bananas
# 2017 Sales      30       21
# 2018 Sales      41       34

행 추가

# 새로운 행 추가
new_row = pd.DataFrame(<span class="dead-link" title="페이지 없음">45, 38</span>, columns=['Apples', 'Bananas'])
df = pd.concat([df, new_row], ignore_index=True)

데이터 접근

# 컬럼 접근 (시리즈 반환)
df['Apples']

# 특정 값 접근 (권장 방법: loc 사용)
df.loc['2017 Sales', 'Apples'] = 35

# 이렇게도 되긴 하지만 loc를 권장
# df['Apples']['2017 Sales'] = 35  # SettingWithCopyWarning 발생 가능

왜 loc를 써야 할까?
df['col']['row'] 방식은 체이닝이라 경고가 뜬다. loc는 명확하게 한번에 접근하므로 안전하다.


정리

차이점 요약

  • 인덱스: 데이터의 위치를 식별하는 라벨 (1차원)
  • 시리즈: 값 + 인덱스로 구성된 1차원 데이터 (컬럼 1개)
  • 데이터프레임: 여러 시리즈(컬럼)를 모은 2차원 데이터 (행과 열, 각자 인덱스)

관계

데이터프레임 = 여러 개의 시리즈
시리즈 = 1개의 컬럼 + 인덱스
데이터프레임에서 하나의 컬럼을 선택 → 시리즈 반환

핵심: 데이터프레임에서 하나의 열을 선택하면 시리즈가 된다. 시리즈와 데이터프레임 모두 인덱스를 가진다는 게 공통점이다.


관련 문서

  • 판다스 (pandas)
  • DataFrame에서 데이터 접근