본문 바로가기

Pandas

DataFrame - 시리즈, 데이터프레임 연산


import pandas as pd
import numpy as np
import seaborn as sns
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

# 딕셔너리 데이터로 판다스 시리즈 만들기
student1 = pd.Series({'국어':100, '영어':80, '수학':90})
print(student1, '\n')

# 학생의 과목별 점수를 200으로 나누기
percentage = student1 / 200
print(percentage, '\n')
print(type(percentage), '\n')

student1 = pd.Series({'국어':100, '영어':80, '수학':90})
student2 = pd.Series({'수학':80, '국어':90, '영어':80})
print(student1, '\n')
print(student2, '\n')

# 두 학생의 과목별 점수로 사칙연산 수행
a = student1 + student2
b = student1 - student2
c = student1 * student2
d = student1 / student2
print(type(d), '\n')

r = pd.DataFrame([a,b,c,d], index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(r, '\n')

 

시리즈 데이터를 한번에 더하거나 뺄수도 있고, 시리즈끼리 연산하면 인덱스 값이 같은 셀끼리 연산한다. 

 

# 딕셔너리 데이터로 판다스 시리즈 만들기
student1 = pd.Series({'국어':np.nan, '영어':80, '수학':90})
student2 = pd.Series({'수학':80, '국어':90})

print(student1, '\n')
print(student2, '\n')

# 두 학생의 과목별 점수로 사칙연산 수행 (시리즈 vs 시리즈)
a = student1 + student2
b = student1 - student2
c = student1 * student2
d = student1 / student2

r = pd.DataFrame([a,b,c,d], index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(r, '\n')

student1 = pd.Series({'국어':np.nan, '영어':80, '수학':90})
student2 = pd.Series({'수학':80, '국어':90})

a = student1.add(student2, fill_value=0)
b = student1.sub(student2, fill_value=0)
c = student1.mul(student2, fill_value=0)
d = student1.div(student2, fill_value=0)

r = pd.DataFrame([a,b,c,d], index=['덧셈', '뺄셈', '곱셈', '나눗셈'])
print(r, '\n')

 

만약 시리즈에서 Nan데이터가 있다면 연산결과도 Nan이 된다. SQL의 Null과 동일하게 생각하면 된다. 연산결과로 Nan을 만들지 말고 특정 값으로 채우고 싶다면 fill_value 옵션을 이용하면 된다. 

 

import pandas as pd
import numpy as np
import seaborn as sns
import ssl
ssl._create_default_https_context = ssl._create_unverified_context

# titanic 데이터셋에서 age, fare 2개 열을 선택하여 데이터프레임 만들기
titanic = sns.load_dataset('titanic')
print(titanic.head(), '\n')
df = titanic.loc[:, ['age', 'fare']]
print(df.head(), '\n')
print(type(df), '\n')

# 데이터프레임에 숫자 10 더하기
addition = df + 10
print(addition.head(), '\n')
print(type(addition), '\n')

titanic = sns.load_dataset('titanic')
df = titanic.loc[:, ['age', 'fare']]
print(df.tail(), '\n')

# 데이터프레임에 숫자 10 더하기
addition = df + 10
print(addition.tail(), '\n')

# 데이터프레임끼리 연산하기 (addition - df)
subtraction = addition - df
print(subtraction.tail(), '\n')

 

seabon 라이브러리를 이용할 때 ssl 오류가 날 수 있는데, 이때는 위 코드에서 4,5줄을 추가해주면 해결이 된다. ssn  부분을 무시하도록 해준다. 데이터프레임 + 값을 하면 전체적으로 연산이 일어나고, 데이터프레임끼리 연산을 하면 열과 행 인덱스 같은 것끼리 연산을 한다. head(), tail() 기능이 있었다. R에서 이 기능을 늘 이용했었는데, 판다스에서도 있었다 ^^


Where there is a will there is a way