Pandas Operation
1. index가 다른 객체들의 산술연산
- 연산: 공통인 요소에 대해서만 연산을 하고 나머지는 NaN
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
1) Series 객체의 산술연산
s1 = Series([5, 6, -1, 2], index=['a', 'c', 'd', 'e'])
s1
a 5
c 6
d -1
e 2
dtype: int64
s2 = Series([3, 4, -1, 2, 7], index=['a', 'c', 'e', 'f', 'g'])
s2
a 3
c 4
e -1
f 2
g 7
dtype: int64
s1+s2
a 8.0
c 10.0
d NaN
e 1.0
f NaN
g NaN
dtype: float64
2) DataFrame 객체의 산술연산
df1 = DataFrame(np.arange(9).reshape(3,3),
columns=list('bcd'),
index=['seoul', 'busan', 'gwangju'])
df1
b | c | d | |
---|---|---|---|
seoul | 0 | 1 | 2 |
busan | 3 | 4 | 5 |
gwangju | 6 | 7 | 8 |
df2 = DataFrame(np.arange(12).reshape(4,3),
columns=list('bde'),
index=['incheon', 'seoul', 'busan', 'suwon'])
df2
b | d | e | |
---|---|---|---|
incheon | 0 | 1 | 2 |
seoul | 3 | 4 | 5 |
busan | 6 | 7 | 8 |
suwon | 9 | 10 | 11 |
df1+df2
b | c | d | e | |
---|---|---|---|---|
busan | 9.0 | NaN | 12.0 | NaN |
gwangju | NaN | NaN | NaN | NaN |
incheon | NaN | NaN | NaN | NaN |
seoul | 3.0 | NaN | 6.0 | NaN |
suwon | NaN | NaN | NaN | NaN |
df3 = DataFrame(np.arange(12).reshape(3,4),
columns=list('abcd'))
df3
a | b | c | d | |
---|---|---|---|---|
0 | 0 | 1 | 2 | 3 |
1 | 4 | 5 | 6 | 7 |
2 | 8 | 9 | 10 | 11 |
df4 = DataFrame(np.arange(20).reshape(4,5),
columns=list('abcde'))
df4
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 4 |
1 | 5 | 6 | 7 | 8 | 9 |
2 | 10 | 11 | 12 | 13 | 14 |
3 | 15 | 16 | 17 | 18 | 19 |
df3+df4
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0.0 | 2.0 | 4.0 | 6.0 | NaN |
1 | 9.0 | 11.0 | 13.0 | 15.0 | NaN |
2 | 18.0 | 20.0 | 22.0 | 24.0 | NaN |
3 | NaN | NaN | NaN | NaN | NaN |
- 없는 값을 0으로 채운 후 연산: add 메소드와 fill_value 활용
df3.add(df4, fill_value=0)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0.0 | 2.0 | 4.0 | 6.0 | 4.0 |
1 | 9.0 | 11.0 | 13.0 | 15.0 | 9.0 |
2 | 18.0 | 20.0 | 22.0 | 24.0 | 14.0 |
3 | 15.0 | 16.0 | 17.0 | 18.0 | 19.0 |
df3.reindex(columns=df4.columns, fill_value=0)
a | b | c | d | e | |
---|---|---|---|---|---|
0 | 0 | 1 | 2 | 3 | 0 |
1 | 4 | 5 | 6 | 7 | 0 |
2 | 8 | 9 | 10 | 11 | 0 |
2. DataFrame과 Series간의 연산
- Numpy의 브로드캐스팅과 유사
arr = np.arange(12).reshape(3,4)
arr
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
arr[0]
array([0, 1, 2, 3])
- 주의: 행렬의 차원이 다를때는 브로드캐스팅되어 연산됨을 주의해야 함
arr - arr[0]
array([[0, 0, 0, 0],
[4, 4, 4, 4],
[8, 8, 8, 8]])
df4 = DataFrame(np.arange(12).reshape(4,3),
columns=list('bde'),
index=['seoul', 'gwanju', 'daegu', 'incheon'])
df4
b | d | e | |
---|---|---|---|
seoul | 0 | 1 | 2 |
gwanju | 3 | 4 | 5 |
daegu | 6 | 7 | 8 |
incheon | 9 | 10 | 11 |
s3 = df4.ix[0]
s3
b 0
d 1
e 2
Name: seoul, dtype: int64
df4-s3
b | d | e | |
---|---|---|---|
seoul | 0 | 0 | 0 |
gwanju | 3 | 3 | 3 |
daegu | 6 | 6 | 6 |
incheon | 9 | 9 | 9 |
s4 = Series(range(3), index=list('bef'))
s4
b 0
e 1
f 2
dtype: int64
df4+s4
b | d | e | f | |
---|---|---|---|---|
seoul | 0.0 | NaN | 3.0 | NaN |
gwanju | 3.0 | NaN | 6.0 | NaN |
daegu | 6.0 | NaN | 9.0 | NaN |
incheon | 9.0 | NaN | 12.0 | NaN |
- DataFrame의 column을 추출한 다음 연산
s5 = df4['d']
s5
seoul 1
gwanju 4
daegu 7
incheon 10
Name: d, dtype: int64
- 이상한 값이 나옴
df4+s5
b | d | daegu | e | gwanju | incheon | seoul | |
---|---|---|---|---|---|---|---|
seoul | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
gwanju | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
daegu | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
incheon | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
- 행에 대한 연산을 수행할 경우 연산에 대한 메소드(add, sub)를 이용
df4
b | d | e | |
---|---|---|---|
seoul | 0 | 1 | 2 |
gwanju | 3 | 4 | 5 |
daegu | 6 | 7 | 8 |
incheon | 9 | 10 | 11 |
df4.add(s5, axis=0)
b | d | e | |
---|---|---|---|
seoul | 1 | 2 | 3 |
gwanju | 7 | 8 | 9 |
daegu | 13 | 14 | 15 |
incheon | 19 | 20 | 21 |
df4.sub(s5, axis=0)
b | d | e | |
---|---|---|---|
seoul | -1 | 0 | 1 |
gwanju | -1 | 0 | 1 |
daegu | -1 | 0 | 1 |
incheon | -1 | 0 | 1 |
'AI&BigData > Basics' 카테고리의 다른 글
[Pandas] 기술통계 계산 1 (0) | 2018.06.03 |
---|---|
Confusion matrix, accuracy, f1 score, precision, recall (0) | 2018.05.28 |
[Pandas] 정렬과 순위 (1) | 2018.05.06 |
[Pandas] 함수 적용과 매핑 (0) | 2018.05.06 |
[Pandas] Index 객체, reindex (0) | 2018.05.06 |
[Pandas] DataFrame (0) | 2018.04.30 |
[Pandas] Series 객체 (0) | 2018.04.29 |
[Numpy] 브로드캐스트. 기타활용 (0) | 2018.04.24 |
[Numpy] 자료형, type(), dtype, arange() (0) | 2018.04.24 |