반응형
안녕하세요. 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_value와 axis 옵션을 사용할 수 있습니다.
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의 통계에 대해 알아볼 예정입니다.
감사합니다.
반응형
'데이터 분석 > Pandas' 카테고리의 다른 글
[Pandas 기초]8.Pandas DataFrame의 sort, rank함수 (0) | 2019.08.28 |
---|---|
[Pandas 기초]7.Pandas DataFrame 통계 (0) | 2019.08.27 |
[Pandas 기초]5.Pandas 데이터 파일 입출력 (3) | 2019.08.20 |
[Pandas 기초]4.여러 DataFrame 연결하기(Join) (0) | 2019.08.17 |
[Pandas 기초]3.Pandas의 자료구조-DataFrame (0) | 2019.08.15 |