08. 시리즈란 무엇인가

🎯 이 장의 목표
  • Pandas 시리즈(Series)가 무엇인지 안다
  • 리스트·딕셔너리·인덱스로 시리즈를 만들 수 있다
  • 시리즈의 속성과 기본 메서드를 사용한다
💡 팁
이 장부터 이 안내서의 주인공 Pandas가 본격 등장합니다. 모든 코드는 Colab에서 직접 실행해 보세요. 맨 위 셀에서 import pandas as pd를 먼저 실행하는 것을 잊지 마세요.

먼저: 시리즈가 뭔가요?

시리즈(Series)라벨(이름표)이 붙은 1차원 데이터입니다. 쉽게 말해, 값들이 한 줄로 늘어서 있고 각 값마다 이름표가 달린 것입니다.

엑셀로 치면 한 개의 열(column)을 떠올리면 됩니다. 0부에서 배운 NumPy 1-D 배열에 "이름표(인덱스)"를 더한 것이라고 봐도 좋습니다.

flowchart TB
    subgraph S["Pandas 시리즈 (Series)"]
        direction LR
        I0["인덱스 0"] --- V0["10"]
        I1["인덱스 1"] --- V1["20"]
        I2["인덱스 2"] --- V2["30"]
    end
    classDef idx fill:#e5dbff,stroke:#7048e8,color:#000
    classDef val fill:#d0ebff,stroke:#1971c2,color:#000
    class I0,I1,I2 idx
    class V0,V1,V2 val
🔑 새 용어 — 인덱스(index)
시리즈의 각 값에 붙은 이름표(라벨)를 인덱스라 합니다. 기본은 0, 1, 2, … 숫자지만, 우리가 원하는 글자로 바꿀 수도 있습니다. 인덱스로 원하는 값을 빠르게 찾습니다.

시리즈 만들기 (1) — 리스트로

가장 기본은 리스트를 pd.Series()로 감싸는 것입니다.

PYTHON
import pandas as pd

s = pd.Series([10, 20, 30, 40])
print(s)

실행 결과:

CODE
0    10
1    20
2    30
3    40
dtype: int64

왼쪽 0, 1, 2, 3인덱스(자동으로 붙은 기본 이름표), 오른쪽이 입니다. 맨 아래 dtype: int64는 값들의 타입이 정수임을 알려 줍니다. (0부에서 본 dtype과 같은 개념입니다.)

시리즈 만들기 (2) — 사용자 정의 인덱스로

index=로 원하는 이름표를 직접 붙일 수 있습니다.

PYTHON
import pandas as pd

sales = pd.Series([100, 250, 175],
                  index=["월요일", "화요일", "수요일"])
print(sales)

실행 결과:

CODE
월요일    100
화요일    250
수요일    175
dtype: int64

이제 숫자 대신 요일 이름으로 값을 찾을 수 있습니다.

PYTHON
print(sales["화요일"])

실행 결과:

CODE
250

💡 : 인덱스에 의미 있는 이름을 붙이면 데이터가 훨씬 읽기 쉬워집니다. "2번째 값"보다 "화요일 매출"이 명확하죠.

시리즈 만들기 (3) — 딕셔너리로

0부에서 배운 딕셔너리를 넘기면, 키가 인덱스, 값이 값이 됩니다. 아주 자연스러운 방법입니다.

PYTHON
import pandas as pd

population = pd.Series({
    "서울": 940,
    "부산": 330,
    "인천": 295
})
print(population)

실행 결과:

CODE
서울    940
부산    330
인천    295
dtype: int64
💡 팁
딕셔너리의 키("서울")가 그대로 인덱스가 되었습니다. 이 패턴은 다음 장에서 데이터프레임(표)을 만들 때도 똑같이 쓰입니다.

시리즈의 속성 (정보 확인하기)

시리즈가 가진 정보를 들여다보는 속성들입니다. 괄호 ()가 없는 점에 주의하세요(속성은 함수가 아니라 "성질"입니다).

PYTHON
import pandas as pd

sales = pd.Series([100, 250, 175],
                  index=["월", "화", "수"])

print(sales.values)   # 값들만 (NumPy 배열로)
print(sales.index)    # 인덱스들
print(sales.dtype)    # 데이터 타입
print(sales.shape)    # 모양
print(sales.size)     # 요소 개수

실행 결과:

CODE
[100 250 175]
Index(['월', '화', '수'], dtype='object')
int64
(3,)
3
속성알려 주는 것
.values값들 (NumPy 배열)
.index인덱스(이름표) 목록
.dtype값들의 데이터 타입
.shape모양 (요소 개수)
.size전체 요소 개수
⚠️ 흔한 실수
흔한 실수 — 속성엔 괄호가 없다
sales.values는 맞지만 sales.values()는 틀립니다. 뒤에 나올 메서드는 괄호가 있고(sales.sum()), 속성은 괄호가 없습니다(sales.index). 헷갈리면 "값을 계산해서 돌려주는 동작이면 메서드(괄호 O), 이미 가진 성질이면 속성(괄호 X)"으로 구분하세요.

시리즈의 기본 메서드

메서드는 시리즈에 어떤 동작을 시켜 결과를 돌려줍니다. 자주 쓰는 것들:

PYTHON
import pandas as pd

scores = pd.Series([85, 92, 78, 90, 88])

print(scores.sum())     # 합계
print(scores.mean())    # 평균
print(scores.max())     # 최댓값
print(scores.min())     # 최솟값
print(scores.describe())# 요약 통계 한 번에!

실행 결과:

CODE
433
86.6
92
78
count     5.000000
mean     86.600000
std       5.412947
min      78.000000
25%      85.000000
50%      88.000000
75%      90.000000
max      92.000000
dtype: float64
💡 팁
describe()는 데이터 분석의 친구
describe()는 개수·평균·표준편차·최소/최대·사분위수를 한 번에 보여 줍니다. 새 데이터를 받으면 가장 먼저 호출해 보는 습관을 들이면 좋습니다. (count=개수, mean=평균, std=표준편차, 25%/50%/75%=사분위수, 50%는 곧 중앙값입니다.)

head()tail()로 앞/뒤 일부만 미리 볼 수도 있습니다.

PYTHON
print(scores.head(2))   # 앞 2개
print(scores.tail(2))   # 뒤 2개

실행 결과:

CODE
0    85
1    92
dtype: int64
3    90
4    88
dtype: int64

CSV로 1-D 데이터 불러오기

실제 데이터는 보통 파일에서 옵니다. 한 열짜리 CSV를 시리즈로 불러올 수 있습니다.

PYTHON
import pandas as pd

# 한 열짜리 CSV를 시리즈로 (squeeze로 1열을 시리즈로 압축)
url = "https://raw.githubusercontent.com/mwaskom/seaborn-data/master/tips.csv"
tips = pd.read_csv(url)
tip_series = tips["tip"]    # 'tip' 열 하나만 꺼내면 그게 시리즈
print(tip_series.head())
print(type(tip_series))

실행 결과:

CODE
0    1.01
1    1.66
2    3.50
3    3.31
4    3.61
Name: tip, dtype: float64
<class 'pandas.core.series.Series'>
💡 팁
데이터프레임(표)에서 열 하나를 꺼내면 그것이 바로 시리즈입니다. 그래서 시리즈를 먼저 배우는 것이 데이터프레임 이해의 지름길입니다. 데이터프레임은 다음 장에서 본격적으로 다룹니다.

🛠 미니 챌린지

  1. 좋아하는 과일 3개의 가격을 담은 시리즈를 만드세요. 인덱스는 과일 이름으로 하세요.
  2. 그 시리즈에서 특정 과일의 가격을 인덱스로 찾아 출력하세요.
  3. 시리즈 [23, 45, 12, 67, 34, 89]를 만들고, 합계·평균·최댓값을 출력하세요.

✅ 미니 챌린지 해설

PYTHON
import pandas as pd

# 1. 과일 가격 시리즈 (딕셔너리로)
prices = pd.Series({"사과": 1500, "바나나": 800, "포도": 4000})
print(prices)

실행 결과:

CODE
사과     1500
바나나     800
포도     4000
dtype: int64
PYTHON
# 2. 인덱스로 찾기
print(prices["포도"])

실행 결과: 4000

PYTHON
# 3. 통계 메서드
s = pd.Series([23, 45, 12, 67, 34, 89])
print(s.sum())
print(s.mean())
print(s.max())

실행 결과:

CODE
270
45.0
89

이 장에서 배운 것

  • 시리즈는 라벨(인덱스)이 붙은 1차원 데이터로, 엑셀의 한 열과 같다.
  • 리스트·index=·딕셔너리 세 가지 방법으로 만들 수 있다.
  • 속성(.values, .index, .dtype — 괄호 없음)으로 정보를 확인한다.
  • 메서드(.sum(), .mean(), .describe() — 괄호 있음)로 계산·요약한다.
  • 데이터프레임에서 열 하나를 꺼내면 그것이 곧 시리즈다.

✍️ 확인 문제

  1. 시리즈에서 "인덱스"란 무엇인가요?
  2. s.shapes.sum() 중 하나는 속성, 하나는 메서드입니다. 어느 쪽이 메서드이고, 어떻게 구분하나요?
  3. 새 데이터를 받았을 때 요약 통계를 한 번에 보려면 어떤 메서드를 쓰나요?
다음 장에서는 시리즈를 정렬하고, 연산하고, 원하는 부분을 인덱싱·슬라이싱으로 꺼내는 법을 익힙니다.
👉 09. 시리즈의 속성·메서드와 다루기