[Pandas 기초]6.Pandas DataFrame 산술 연산

Learn What is Arithmetic Operation of DataFrame

PSY

3 minute read

안녕하세요. PSYda입니다.

이번 포스팅에서는 Pandas DataFrame의 산술 연산에 대해 알아보겠습니다.

소개할 내용은 아래와 같습니다.

  • DataFrame과 DataFrame의 연산 함수 소개
  • DataFrame과 Sereis의 연산 함수 소개

5.Pandas DataFrame 산술 연산

DataFrame 의 연산은 아래의 두 가지 케이스가 있습니다.

  • DataFrame vs DataFrame 연산
  • DataFrame vs Series 연산

5.1 DataFrame vs DataFrame 연산

DataFrame의 연산 규칙은 아래와 같습니다.

  • 같은 index 이면서 같은 column 명을 가진 두 value를 연산함
  • 같은 index 이면서 같은 column 명을 가진 두 value 중 하나라도 NaN이 있으면 NaN으로 채워진다.
  • index나 column 명이 다르면 NaN으로 채워진다.
    OperationRule

연산하는 방법에는 두 가지 방법이 있습니다.

  • 연산자( +, -, *, / )를 이용한 연산
  • 함수( add, sub, mul, div )를 이용한 연산

기본 연산은 동일하지만 함수를 사용하면 fill_valueaxis 옵션을 사용할 수 있습니다.

Ex)df1.add(df2, fill_value = 0, axis = 0)

  • fill_value = 0 : NaN값을 0으로 간주하고 연산, 0이 아닌 값 입력 가능
  • axis = 0 : DataFrame와 Series간의 연산에서 방향을 지정(5.1.2 참고)
    OperationRule2

곱하기, 나누기, 빼기 등도 동일한 방법이므로, 대표로 더하기에 대해서만 실습해보겠습니다.

import pandas as pd
from pandas import Series, DataFrame
import numpy as np
df1 = DataFrame([[1,3,5],[7,9,11],[5,13,15]])
df1
0 1 2
0 1 3 5
1 7 9 11
2 5 13 15
df2 = DataFrame([[1,2,3],[4,np.nan,6],[7,8,9]], columns=[0,1,3], index=[0,1,3])
df2
0 1 3
0 1 2.0 3
1 4 NaN 6
3 7 8.0 9
df1 + df2
0 1 2 3
0 2.0 5.0 NaN NaN
1 11.0 NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
df1.add(df2,fill_value=0)
0 1 2 3
0 2.0 5.0 5.0 3.0
1 11.0 9.0 11.0 6.0
2 5.0 13.0 15.0 NaN
3 7.0 8.0 NaN 9.0

5.2 DataFrame vs Series 연산

연산 함수(add, sub, mul, div) 의 axis 옵션을 통해 행, 열 방향으로 연산 가능

Ex) df1.add(df2, axis = 0)

axis = 0 : Index방향(행방향)으로 DataFrame과 Series 연산

  • DataFrame과 Series가 동일한 Index를 가지면 연산, 다르면거나 한쪽만 있으면 NaN

axis = 1 : Column방향으로 DataFrame과 Series 연산

  • DataFrame과 Series가 동일한 Column명을 가지면 연산, 다르면거나 한쪽만 있으면 NaN

연산을 위한 Sereis 생성

s1 = Series([1,2,3,4])
s1
0    1
1    2
2    3
3    4
dtype: int64
df1
0 1 2
0 1 3 5
1 7 9 11
2 5 13 15
df1.add(s1, axis = 0)
0 1 2
0 2.0 4.0 6.0
1 9.0 11.0 13.0
2 8.0 16.0 18.0
3 NaN NaN NaN
df1.add(s1, axis = 1)
0 1 2 3
0 2 5 8 NaN
1 8 11 14 NaN
2 6 15 18 NaN

위의 Jupyter notebook 내용은 여기 Github에서도 확인 할 수 있습니다,

다음 포스팅은 DataFrame의 통계에 대해 알아볼 예정입니다.
다음 포스팅 바로 가기

감사합니다.


comments powered by Disqus