파이썬판다스 따라하기/3판다스연산

#판다스연산3편 - 판다스 round sum prod abs transpose rank 함수

모두의 실험실 2023. 5. 28. 02:46
728x90

python에서 일반적으로 사용하는 함수들과

유사하게 판다스에도 적용가능함

 

하지만 숫자 1개 가 아니라 dataframe을 가공하는

기능이 추가적으로 존재함

 

DataFrame.round(decimals=0, args, kwargs)

반올림해주는 함수임 파이썬의 round함수와

동일 decimals는 소수 몇째 자리인지 정의하는 부분

decimals = 1이면 소수2째자리에서 반올림함

decimals = -1이면 일의 자리에서 반올림함

단 출력들은 모두 실수로 반환

 

number = 35.45275
for i in range(-1,3):
    print(round(number,i))
print('\n-----------\n')

import pandas as pd
import numpy as np
## 난수 발생기
data = np.random.rand(2,2)*100
df = pd.DataFrame(columns = ['col1','col2'],index = ['index1','index2'],data = data)

print(df)
print('\n-----------\n')
for i in range(-1,3):
    print(df.round(i))
    print('\n-----------\n')

-결과 (이미지)

 

round 함수를 실행하기 전에

numpy 패키지 내에 ramdom 패키지가 있으며

그 안에 rand 메소드가 있음

rand함수는 0-1 사이의 랜덤 float형 숫자를 반환함

rand(2,3)은 2행 3열에 0-1사이 랜덤float형 숫자를 반환함 

판다스 round함수 예제 결과는 python의 round와 동일

 

DataFrame.sum(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, kwargs)

합을 구해주는 함수임 

axis가 0이면 각 열의 값을 모두 더해주는 연산을 함

axis가 1이면 각 행의 값을 모두 더해주는 연산을 함

skipna는 True 와 False가 될 수 있으며 

기본적으로 True의 값을 가짐

True의 경우는 NaN을 무시하고 모두 더해줌

False의 경우는 NaN을 포함하면 NaN을 반환해줌

min_count가 2일 경우는 계산에 필요한 숫자의 

갯수가 2는 되어야함 

3*3행렬에서 axis가 0인데 첫번째 열에 NaN이 2개이고

min_count가 2이면 NaN을 반환함

 

import pandas as pd
import numpy as np

data = [[1,2,3],[4,np.NaN,6],[7,8,9]]
df = pd.DataFrame(columns = ['col1','col2','col3'],index = ['index1','index2','index3'],data = data)
print(df)
print('\n-----------\n')

print(df.sum(skipna = True,axis=0,min_count = 0))
print('\n-----------\n')

print(df.sum(skipna = False,axis=0,min_count = 0))
print('\n-----------\n')

print(df.sum(skipna = True,axis=0,min_count = 3))
print('\n-----------\n')

print(df.sum(skipna = True,axis=1,min_count = 0))
print('\n-----------\n')

-결과 (이미지)

 

DataFrame.prod(axis=None, skipna=None, level=None, numeric_only=None, min_count=0, kwargs)

sum과 내부요소는 동일하며 더하는 것이 아니라

곱하는 함수임

import pandas as pd
import numpy as np

data = [[1,2,3],[4,np.NaN,6],[7,8,9]]
df = pd.DataFrame(columns = ['col1','col2','col3'],index = ['index1','index2','index3'],data = data)
print(df)
print('\n-----------\n')

print(df.prod(skipna = True,axis=0,min_count = 0))
print('\n-----------\n')

print(df.prod(skipna = False,axis=0,min_count = 0))
print('\n-----------\n')

print(df.prod(skipna = True,axis=0,min_count = 3))
print('\n-----------\n')

print(df.prod(skipna = True,axis=1,min_count = 0))
print('\n-----------\n')

-결과 (이미지)

 

DataFrame.abs( )는 절대값을

반환하는 함수임

NaN은 NaN으로 반환

import pandas as pd
import numpy as np

data = [[1,2,3],[4,np.NaN,6],[-7,-8,-9]]
df = pd.DataFrame(columns = ['col1','col2','col3'],index = ['index1','index2','index3'],data = data)
print(df)
print('\n-----------\n')

print(df.abs())
print('\n-----------\n')

-결과 (이미지)

DataFrame.transpose(args, copy=False)

는 행열을 뒤집는 합수임

2*4 행렬이면 4*2으로 변환

import pandas as pd

data = [[1,2,3,4],[5,6,7,8]]
df = pd.DataFrame(columns = ['col1','col2','col3','col4'],index = ['index1','index2'],data = data)
print(df)
print('\n-----------\n')

print(df.transpose())
print('\n-----------\n')

-결과 (이미지)

 

 

DataFrame.rank(axis=0, method='average', numeric_only=None, na_option='keep', ascending=True, pct=False)

rank함수는 값을 정해주는 함수임

axis가 0이면 행의 순위를 결정해주며

axix가 1이면 열의 순위를 결정해줌

method는 동순위를 어떻게 표현해줄지 결정해주는 요소

data가 1,2,2,3 이면 'average'는 'min'의 방식과 같이

낮은등수로 표시를 하면서

2가 2개 이므로 2.5로 표현함

'min'은 2를 공동 2로 낮은 등수로 표시 3은 4번째라서 4등

'max'는 2를 공동 3으로 큰 숫자의 등수로 표시

'first'면 먼저 두번째 2에 2등 세번째 2에 3등을 표시

'dense'는 'min'과 같이 동작하지만 차이점은 등수가 연속된

정수형으로 증가해서 3은 3등이 됨

 

import pandas as pd
import numpy as np

data = [[1],[2],[2],[2],[3],[3],[4],[5],[6],[np.NaN]]
l_index = ['index' + str(i) for i in range(1,len(data)+1)]
df = pd.DataFrame(columns = ['col1'],index = l_index,data = data)
print(df)
print('\n-----------\n')
df['average'] = df['col1'].rank(method='average')
df['min'] = df['col1'].rank(method='min')
df['max'] = df['col1'].rank(method='max')
df['first'] = df['col1'].rank(method='first')
df['dense'] = df['col1'].rank(method='dense')

print(df)

-결과 (이미지)

 

Nan에도 순위를 부여할수 있는 옵션이 존재함

na_option이 존재함

na_option이 'keep'이면 순위에도 NaN을 반환해주고

default 옵션은 'keep'과 같음

'top'은 1등을 부여하며 bottom은 꼴등을 부여함

pct는 백분위로 표시하는 옵션임

 

import pandas as pd
import numpy as np

data = [[1],[2],[2],[2],[3],[3],[4],[5],[6],[np.NaN]]
l_index = ['index' + str(i) for i in range(1,len(data)+1)]
df = pd.DataFrame(columns = ['col1'],index = l_index,data = data)
print(df)
print('\n-----------\n')
df['keep'] = df['col1'].rank(na_option='keep')
df['top'] = df['col1'].rank(na_option='top')
df['bottom'] = df['col1'].rank(na_option='bottom')
df['pct'] = df['col1'].rank(pct='True')


print(df)

-결과 (이미지)

태그

-------------------------------------------------------------

#python, #파이썬, #anaconda, #아나콘다, #기초, #클래스, #class, #import, #selenium, #셀레늄, #자동, #교육, #코딩교육, #coding, #chatgpt, #챗GPT, #로봇,

 

728x90
반응형