공부/판다스 데이터분석

[ Pandas ] 산술연산 (시리즈, 데이터프레임)

haena02 2023. 1. 10. 17:11
반응형

판다스 객체의 산술연산은 내부적으로 3단계의 프로세스를 거친다.

  1. 행/열 인덱스를 기준으로 모든 원소를 정렬한다.
  2. 동일한위치에 있는 원소끼리 일대일로 대응시킨다.
  3. 대응이되는 원소끼리 연산을 처리한다. (이때 대응되는 원소가 없다면 NaN으로 처리)

 

1. 시리즈연산

 

1.1 시리즈 vs 숫자

 

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

+ - % * 모두 가능하다. 

Series객체 + 연산자 + 숫자

그냥 계산식 쓰듯이 자연스럽게 써주면된다.

 

1.2 시리즈 vs 시리즈

 

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

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               #나눗셈
print('\n')

# 사칙연산 결과를 데이터프레임으로 합치기 (시리즈 -> 데이터프레임)
result = pd.DataFrame([addition, subtraction, multiplication, division], 
                      index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(result)

시리즈끼리의 연산결과

실제로 위의 예제처럼 인덱스의 순서가 달라도 똑같은 인덱스를 찾아서 산술연산을 진행한다.

짝지을 인덱스가 없다면 NaN으로 입력된다. 

짝이 지어져도 값이 NaN이 들어있다면 연산이 불가하므로 NaN으로 입력된다. 

*NaN값은 numpy.nan이다.

 

1.3 연산메소드

 

NaN이 출력되는게 싫다면 fill_value 옵션을 설정하면된다. 

Series1.add(Series2, fill_value=0)

이런 설정으로 나누는 수가 0이 된다면 결과로 무한대라는 의미의 inf가 출력되게된다. 

 

2. 데이터프레임 연산

 

데이터 프레임은 여러 시리즈가 한데 모인것으로 시리즈 연산을 확장하는 개념으로 이해하면된다. 

행/열 를 기준으로 정렬하고 일대일 대응하는 원소끼리 연산을 처리한다. 

 

2.1 데이터프레임 vs 숫자

 

데이터 프레임에 숫자를 더하면 시리즈와 마찬가지로 모든 원소에 숫자를 더한다. 

기존 데이터프레임의 형태를 유지한 채 원소 값만 새로운 계산 값으로 바뀐다. 

 

DataFrame객체 + 연산자 + 숫자

 

2.2 데이터프레임 vs 데이터프레임

 

각 데이터 프레임의 같은 행, 열 위치에 있는 원소끼리 계산한다. 

NaN에 대한 규칙은 시리즈와 동일하게 짝지을 인덱스가 없다면 NaN으로 입력된다.

짝이 지어져도 값이 NaN이 들어있다면 연산이 불가하므로 NaN으로 입력된다. 

 

DataFrame1 + 연산자 + DataFrame2

 

 

반응형