[판다스 입문/산술연산] 시리즈 연산

2022. 10. 18. 12:41

목차

 

1. 시리즈 vs 숫자

2. 시리즈 vs 시리즈

3. 연산 메소드


시리즈 vs 숫자

 

Series객체 + 연산자(+, -, *, /) + 숫자

시리즈 객체에 어떤 숫자를 더하면 시리즈의 개별 원소에 각각 숫자를 더하고 계산한 결과를 시리즈 객체로 반환한다.

 

# 예제 1-21

import pandas as pd

student1 = pd.Series({'국어': 100, '영어': 80, '수학': 90})
print(student1)
print('\n')

percentage = student1 / 200

print(percentage)
print('\n')
print(type(percentage))

 

예제 1-21 출력 결과

 

 

시리즈 vs 시리즈

 

Series1 + 연산자(+, -, *, /) + Series2

시리즈의 모든 인덱스에 대해 같은 인덱스를 가진 원소끼리 계산한다.

인덱스에 연산 결과를 매칭하여 새 시리즈를 반환한다.

 

# 예제 1-22

import pandas as pd

student1 = pd.Series({'국어': 100, '영어': 80, '수학': 90})
student2 = pd.Series({'수학': 80, '국어': 90, '영어': 80})

print(student1)
print('\n')
print(student2)
print('\n')

addition = student1 + student2
subtraction = student1 - student2
multiplication = student1 * student2
division = student1 / student2

result = pd.DataFrame([addition, subtraction, multiplication, division], index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)

 

예제 1-22 출력 결과

위 예제에서 인덱스로 주어진 과목명의 순서가 다르지만, 판다스는 같은 과목명(인덱스)를 찾아 정렬한 후 같은 과목명의 점수(데이터 값)끼리 연산한다.

 

# 예제 1-23

import pandas as pd
import numpy as np

student1 = pd.Series({'국어': np.nan, '영어': 80, '수학': 90})
student2 = pd.Series({'수학': 80, '국어': 90})

print(student1)
print('\n')
print(student2)
print('\n')

addition = student1 + student2
subtraction = student1 - student2
multiplication = student1 * student2
division = student1 / student2
print(type(division))
print('\n')

result = pd.DataFrame([addition, subtraction, multiplication, division], index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)

 

예제 1-23 출력 결과

연산을 하는 두 시리즈의 원소 개수가 다르거나, 시리즈의 크기가 같더라도 인덱스 값이 다를 수 있다.

<예제 1-23>처럼 어느 한 쪽에만 인덱스가 존재하고 다른 쪽에는 짝을 지을 수 있는 동일한 인덱스가 없는 경우 NaN으로 처리하게 된다.

한편 동일한 인덱스가 양쪽에 모두 존재하여 서로 대응되더라도 어느 한 쪽의 데이터 값이 NaN인 경우도 마찬가지로 연산 결과가 NaN이 된다.

 

 

연산 메소드

 

Series1.add(Series2, fill_value=n)

시리즈 간의 연산에서 객체 사이에 공통 인덱스가 없거나 NaN이 포함되는 경우 연산 결과가 NaN으로 반환된다.

이런 상황을 피하려면 연산 메소드에 fill_value 옵션을 설정하면 된다.

 

# 예제 1-24

import pandas as pd
import numpy as np

student1 = pd.Series({'국어': np.nan, '영어': 80, '수학': 90})
student2 = pd.Series({'수학': 80, '국어': 90})

print(student1)
print('\n')
print(student2)
print('\n')

sr_add = student1.add(student2, fill_value=0)
sr_sub = student1.sub(student2, fill_value=0)
sr_mul = student1.mul(student2, fill_value=0)
sr_div = student1.div(student2, fill_value=0)

result = pd.DataFrame([sr_add, sr_sub, sr_mul, sr_div], index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)

 

예제 1-24 출력 결과

연산 메소드에 fill_value=0 옵션을 설정하여 NaN으로 계산된 결과들이 0으로 채워진 것을 볼 수 있다. 


파이썬 머신러닝 판다스 데이터분석
저자 : 오승환
출판 : 정보문화사
발매 : 2019.06.05

 

BELATED ARTICLES

more