반응형

안녕하세요. 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으로 채워진다.

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

  • 연산자( +, -, *, / )를 이용한 연산
  • 함수( 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 참고)

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

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의 통계에 대해 알아볼 예정입니다.

감사합니다.

반응형

+ Recent posts