[미래유망] 판다스(데이터 프레임) #03 연산법

돼지인간·2025년 4월 7일

미래유망

목록 보기
12/41

설명 :

pandas.DataFrame으로 생성된 인스턴스는 크기의 변경이 가능한 2차원 배열입니다.
(Series는 1차원)
데이터 구조에는 레이블이 지정된 축인 행과 열까지 포함되며,
클래스 매서드를 통해 레이블의 수정이 가능합니다.


덧셈

기본 사용법
df.add(other, axis='columns', level=None, fill_value=None)
other : 데이터프레임이나, Series, 스칼라 등 데이터가 올 수 있습니다. 더할 값입니다.
axis : 더할 레이블을 설정합니다. 0은 행(index), 1은 열 입니다.
※Series일 경우 Index와 일치시킬 축
level : multiIndex에서 계산할 Index의 레벨입니다.
fill_value : NaN 값등의 누락 요소를 계산 전에 이 값으로 대체합니다.

먼저, 간단한 3x3 짜리 DataFrame을 만들어 보겠다.

data = [[1,10,100],[2,20,200],[3,30,300]]
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=data,index=row,columns=col)
print(df)


다양한 더하기, 빼기법

1. 스칼라 값 더하기(빼기는 add -> sub)

맵핑 되어 전체가 다 1씩 증가한 것을 볼 수 있다.

data = [[1,10,100],[2,20,200],[3,30,300]]
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=data,index=row,columns=col)
result = df.add(1) # 또는 result = df + 1
print(result)

2. 다른 DataFrame객체를 더하기

# 기본으로 제공되는 코드 1
data = [[1,10,100],[2,20,200],[3,30,300]]
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=data,index=row,columns=col)
# 기본으로 제공되는 코드 2 
data2 = [[3], [4], [5]]
df2 = pd.DataFrame(data=data2, index=['row1', 'row2', 'row3'], columns=['col1'])
print(df2)
# 추가 되는 코드 
result = df.add(df2) # df에다가 df2를 더했지만 df2엔 `col2`, `col3`이 없어 Nan으로 표시
print(result)

3. fill_value

df2에는 존재하지 않던 col2, col3의 요소들에 대해 fill_value값인 0으로 채워 넣은 뒤
계산을 진행하여 계산한 것을 확인할 수 있습니다.

result = df.add(df2,fill_value=0) # 0으로 남는 값 채움
print(result)


다양한 곱하기, 나누기법

일단 기본으로 생성함

data = [[1,10,100],[2,20,200],[3,30,300]]
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=data,index=row,columns=col)
print(df)

1. 스칼라 값 곱하기(나누기는 mul -> div)

result = df.mul(2) # 기본값에 곱하기 2를 한 것을 알 수 있음
print(result)

2. 다른 DataFrame객체를 곱하기

data2  = [[3],[4],[5]]
df2 = pd.DataFrame(data=data2,index=['row1','row2','row3'],columns=['col1'])
print(df2)

result = df.mul(df2)
print(result)


3. fill_value

fill_value 인수를 통해 해당 오류를 출력 가능하도록 바꿔보도록 하겠다.

result = df.mul(df2,fill_value=0)
print(result)

4. 나누기는 0으로 나눌 수 없다??

0으로 나눈 경우는 div/0 에러 대신 inf를 반환합니다.

data2  = [[0],[2],[3]]
df2 = pd.DataFrame(data=data2,index=['row1','row2','row3'],columns=['col1'])
print(df2)

result = df.div(df2)
print(result)

0값이 있으므로 inf 출력

fill_value 인수를 통해 해당 오류를 출력 가능하도록 바꿔보도록 하겠습니다.

result = df.div(df2,fill_value=1) # 1로채워 1으로 나눌 수 있게 변경(0은 X)
print(result) 


다양한 나머지, 제곱법

일단 기본으로 생성함

data = [[1,10,100],[2,20,200],[3,30,300]]
col = ['col1','col2','col3']
row = ['row1','row2','row3']
df = pd.DataFrame(data=data,index=row,columns=col)
print(df)

1. 스칼라 값 나머지법(나머지는 위와 동일함)

result = df.mod(7)
print(result)

1. 스칼라 값 제곱법(나머지는 위와 동일함)

result = df.pow(3)
print(result)

기본의 값의 3제곱이 나오는 것을 볼 수 있다.

2. fill_value(나머지도 나누기와 같이 fill_value = 1)

df2에는 존재하지 않던 col2, col3의 요소들에 대해 fill_value값인 0으로 채워 넣은 뒤
계산을 진행하여 계산한 것을 확인할 수 있습니다. (숫자의 0승은 1)

result = df.pow(df2,fill_value=0)
print(result)


행렬곱

col = ['col1','col2']
row = ['row1','row2']
data1 = [[1,2],[3,4]]
data2 = [[5,6],[7,8]]
df1 = pd.DataFrame(data=data1)
df2 = pd.DataFrame(data=data2)
print(df1)
print(df2)

DataFrame간 행렬곱

df3 = df1.dot(df2)
print(df3)

행렬곱은 어떻게 진행될까?


profile
안녕하세요 게임개발을 공부하고 있는 돼지인간 입니다.

0개의 댓글