Pandas & NumPy Academy · 강의

Series의 벡터화 연산

두 Series 사이에서 산술 연산을 수행하고 인덱스 정렬을 자동으로 처리하며, 정렬 후 누락된 값을 NaN으로 채웁니다.

레슨 3/413개 단계

Series의 벡터화 연산은(는) CoddyKit의 무료 Pandas & NumPy Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Pandas & NumPy Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

벡터화 연산을 사용하는 이유

NumPy와 마찬가지로 Pandas Series는 Python 반복문 없이 모든 요소에 산술 연산, 비교, 함수를 적용하는 벡터화 연산을 지원합니다. 따라서 코드가 간결해지고 실행 속도도 빨라집니다. 내부적으로 각 연산은 NumPy의 C 수준 루틴에 위임되지만, Pandas는 연산을 수행하기 전에 인덱스를 자동으로 정렬하는 중요한 기능을 추가로 제공합니다.

import pandas as pd

revenue = pd.Series([1000, 2000, 1500], index=['Jan', 'Feb', 'Mar'])
tax_rate = 0.2
net = revenue * (1 - tax_rate)   # vectorized -- no loop
print(net)

두 Series 간 산술 연산

두 Series를 더하거나 빼거나 곱하거나 나눌 때 Pandas는 먼저 인덱스 레이블을 기준으로 정렬합니다. 두 Series에 모두 존재하는 레이블의 위치만 결과를 생성하고, 일치하지 않는 레이블에는 NaN이 들어갑니다. 이러한 동작은 서로 정렬되지 않은 데이터로 인해 발생하는 숨은 오류를 방지합니다. 예를 들어 서로 다른 순서로 저장된 두 데이터 원본의 1월 수치를 더할 때 유용합니다.

import pandas as pd

a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])

print(a + b)
# w     NaN
# x     NaN
# y    21.0
# z    32.0

정렬된 연산에서 NaN 채우기

정렬되지 않은 연산에서 NaN이 전파되는 것을 방지하려면 .add(), .sub(), .mul(), .div()와 같은 산술 메서드에 fill_value= 매개변수를 사용하십시오. 이 매개변수는 연산을 수행하기 전에 한쪽 Series에 없는 레이블을 지정한 값으로 대체합니다. 덧셈에서는 일반적으로 0을, 곱셈에서는 1을 사용합니다.

import pandas as pd

a = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
b = pd.Series([1, 2, 3], index=['y', 'z', 'w'])

result = a.add(b, fill_value=0)
print(result)
# w     3.0
# x    10.0
# y    21.0
# z    32.0

Series의 스칼라 산술 연산

스칼라와 산술 연산을 수행하면 모든 요소에 연산이 적용되고 동일한 인덱스를 가진 새로운 Series가 생성됩니다. 이는 가장 단순한 형태의 벡터화입니다. 예를 들면 s + 5, s * 100, s ** 2가 있습니다. 스칼라 산술 연산은 NaN을 새로 만들지 않으며, 단위 변환, 정규화, 시계열 값의 오프셋 조정에 사용됩니다.

import pandas as pd

prices_eur = pd.Series([1.0, 2.5, 4.0], index=['a', 'b', 'c'])
exchange = 1.08
prices_usd = prices_eur * exchange
print(prices_usd.round(2))
# a    1.08
# b    2.70
# c    4.32

Series에 NumPy 범용 함수 적용하기

NumPy 범용 함수는 Pandas Series에서 원활하게 작동하며 동일한 인덱스를 가진 Series를 반환합니다. 따라서 배열로 먼저 변환하지 않고도 Series에 np.sqrt(s), np.log1p(s), np.exp(s)를 직접 호출할 수 있습니다. 결과는 원래 레이블을 유지하는 새로운 Series입니다.

import pandas as pd
import numpy as np

s = pd.Series([0, 1, 4, 9, 16], index=list('abcde'))
print(np.sqrt(s))
# a    0.0
# b    1.0
# c    2.0
# d    3.0
# e    4.0

Series의 비교 연산

비교 연산자(==, !=, >, <, >=, <=)는 요소별로 불리언 Series를 반환합니다. 이는 필터링의 기본 구성 요소입니다. 불리언 Series를 .loc에 전달하여 조건에 맞는 행을 선택할 수 있습니다. 두 Series를 비교할 때 Pandas는 인덱스도 자동으로 정렬합니다.

import pandas as pd

s = pd.Series([3, 7, 2, 9, 1], index=list('abcde'))
print(s > 4)
# a    False
# b     True
# c    False
# d     True
# e    False
print(s[s > 4])  # b:7  d:9

벡터화 연산 연결하기

각 연산이 새로운 Series를 반환하므로 하나의 표현식에서 여러 변환을 연결할 수 있습니다. 이렇게 하면 코드가 읽기 쉬워지고 불필요한 중간 변수를 만들지 않아도 됩니다. 복잡한 파이프라인에서는 괄호를 사용하여 연결된 표현식을 여러 줄로 나누십시오. 연산 연결은 변경 불가능한 데이터를 사용하는 함수형 프로그래밍에 해당하는 Pandas 방식입니다.

import pandas as pd
import numpy as np

raw_scores = pd.Series([55, 80, 45, 90, 72])
normalised = (raw_scores - raw_scores.min()) / (raw_scores.max() - raw_scores.min())
print(normalised.round(2))
# 0    0.22
# 1    0.78
# 2    0.00
# 3    1.00
# 4    0.60

벡터화 연산에서 NaN 처리하기

NaN은 전염성이 있습니다. NaN이 포함된 모든 산술 연산은 NaN을 결과로 만듭니다. 연산 전에 s.fillna(value)를 사용하여 값을 대체하거나 집계 메서드에 skipna=True 매개변수를 사용하십시오. pd.isna(s) 함수는 NaN이 있는 위치를 표시하는 불리언 Series를 반환하므로, 통계를 계산하기 전에 데이터를 점검할 때 사용할 수 있습니다.

import pandas as pd
import numpy as np

s = pd.Series([1.0, np.nan, 3.0, np.nan, 5.0])
print(s + 10)
# 0    11.0  2    13.0  4    15.0 -- NaN stays NaN

print(s.fillna(0) + 10)
# 0    11.0  1    10.0  2    13.0  3    10.0  4    15.0

Series의 abs(), clip(), round()

Pandas Series는 NumPy와 유사한 여러 메서드를 직접 제공합니다. s.abs(), s.clip(lower, upper), s.round(decimals)는 모두 요소별로 변환을 적용한 새로운 Series를 반환합니다. 이들은 NumPy 범용 함수 호출과 같은 기능을 하지만 메서드 구문을 사용하며 Series의 인덱스와 이름을 유지합니다.

import pandas as pd

s = pd.Series([-2.5, 1.3, -0.7, 4.9, -3.1])
print(s.abs())          # [2.5 1.3 0.7 4.9 3.1]
print(s.clip(-2, 2))    # [-2.  1.3 -0.7  2. -2. ]
print(s.round(0))       # [-2.  1.  -1.   5.  -3.]

성장률을 계산하는 pct_change()

s.pct_change()는 연속된 요소 사이의 백분율 변화를 계산합니다. 공식은 (현재 값 - 이전 값) / 이전 값입니다. 첫 번째 요소에는 이전 값이 없으므로 NaN이 됩니다. 이는 전월 대비 성장률, 금융 분야의 일일 수익률, 시계열 모델의 변화율 특성을 계산할 때 사용하는 표준 연산입니다.

import pandas as pd

monthly_revenue = pd.Series([100, 120, 110, 140],
                            index=['Q1', 'Q2', 'Q3', 'Q4'])
growth = monthly_revenue.pct_change()
print(growth.round(3))
# Q1      NaN
# Q2    0.200
# Q3   -0.083
# Q4    0.273

Series의 cumsum()과 cumprod()

s.cumsum()은 누적 합계 Series를 반환하고 s.cumprod()는 누적 곱 Series를 반환합니다. 이를 사용하여 누적 매출, 복리 투자 수익률, 누적 단어 수를 계산할 수 있습니다. 원래 인덱스 레이블을 유지하므로 시간이나 범주에 따른 누적 Series를 쉽게 시각화할 수 있습니다.

import pandas as pd

daily_sales = pd.Series([100, 150, 80, 200],
                        index=['Mon', 'Tue', 'Wed', 'Thu'])
print(daily_sales.cumsum())
# Mon    100
# Tue    250
# Wed    330
# Thu    530

빠른 확인

이 레슨에서 배운 Series의 벡터화 연산에 대한 이해도를 확인해 보십시오.

레슨 요약

이 레슨에서는 다음을 배웠습니다. 산술 연산자는 반복문 없이 Series에 요소별로 적용됩니다. Pandas는 연산 전에 두 Series를 인덱스 레이블 기준으로 자동 정렬하며, 일치하지 않는 위치에는 NaN을 넣습니다. 또한 fill_value, pct_change, cumsum과 같은 메서드는 분석 작업에 맞게 벡터화 연산을 확장합니다. 다음으로 빠른 요약에 유용한 Series 메서드인 describe, value_counts, map을 살펴보겠습니다.

무료로 시작

AI 튜터와 함께 Python을(를) 배우세요 — 무료

브라우저에서 실제 코드를 작성하고 실행하며, 24/7 AI 튜터로부터 즉각적인 도움을 받고, 웹이나 앱에서 중단한 부분부터 계속 학습하세요.

코스
30
레슨
120

자주 묻는 질문

“Series의 벡터화 연산” 강의는 무료인가요?

네 — “Series의 벡터화 연산” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Pandas & NumPy Academy 강의 전체를 잠금 해제할 수 있습니다. Pandas & NumPy Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“Series의 벡터화 연산”에서 뭘 배우나요?

두 Series 사이에서 산술 연산을 수행하고 인덱스 정렬을 자동으로 처리하며, 정렬 후 누락된 값을 NaN으로 채웁니다. 브라우저에서 직접 실행하는 실습 코드로 Pandas & NumPy Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Pandas & NumPy Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Pandas & NumPy Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.

“Series의 벡터화 연산” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Pandas & NumPy Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Pandas & NumPy Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. Series 만들기
  2. 레이블 기반 및 위치 기반 접근
  3. Series의 벡터화 연산
  4. 유용한 Series 메서드
← Pandas & NumPy Academy(으)로 돌아가기