[pandas] df.sample()

cs2tree·2023년 2월 20일
0

Pandas

목록 보기
2/2

pandas에 sample()이라는 함수가 있다. random sample을 뽑아주는 함수 이다. 각 인자들이 의미하는 바를 알아보고, 사용법을 알아보자.

DataFrame.sample(n=None, frac=None, replace=False,
                  weights=None, random_state=None, 
                  axis=None, ignore_index=False)

들어가는 인자는 아래와 같다.

  • n / frac: 리턴되는 개수(/비율)를 정한다

  • replace (bool) : 중복 허용 여부를 정한다

  • weights : 원소 별 추출 확률을 정한다

  • random state: seed for random number generator

  • axis : 0 or 'index' / 1 or 'columns'

  • ignore_index

예시를 통해서 살펴보자.

df = pd.DataFrame({'num_lengs': [2, 4, 8, 0],
					'num_wings': [2, 0, 0, 0],
                    'num_specimen_seen': [10, 2, 1, 8],
                    index=['falcon', 'dog', 'spider', 'fish'])

파이토치 홈페이지에서 가져온 예시이다. 이걸 가지고 요렇게 저렇게 바꿔보면서 각 인자가 무엇을 의미하는 지 확실히 살펴보자.

n / frac ( + axis )

1. Series에서

위 데이터프레임에서 하나의 컬럼만 가져와서 Series에서 sample을 다루는 법을 알아보자.

우선 'num_lengs'라는 컬럼은 아래와 같이 생겼다.

df['num_lengs']

이걸 찍어보면 아래와 같이 크기가 4인 시리즈인 것을 알 수 있다.

falcon    2
dog       4
spider    8
fish      0
Name: num_lengs, dtype: int64

이 시리즈에 3개의 샘플 n=3을 무작위로 가져오라고 하면 이렇게 된다.

df['num_lengs'].sample(n=3)

이렇게 spider, fish, dog, falcon 중 랜덤하게 세 개가 뽑혀 나온다.

spider    8
fish      0
dog       4
Name: num_lengs, dtype: int64

위에서 n과 유사한 기능을 하고, 그래서 n과는 같이 쓸 수 없는 것으로 frac이 있다고 했다. 그럼 frac은 어떻게 동작하는 지 살펴보자

아래와 같이 총 4개 중 절반 (frac=0.5)만 가져오라고 해봤다.

df['num_lengs'].sample(frac=0.5)

결과는 아래와 같다

fish      0
falcon    2
Name: num_lengs, dtype: int64

즉, nfrac은 기본적으로 '몇 개의 샘플을 리턴할거야?' 라는 같은 질문에 답하지만, 방식이 다르다. n개수를 지정해주고, frac비율을 지정해주는 방식이다.

2. dataframe에서

nfracdataframe에서 사용해보자. dataframe에서 달라지는 점이 있다면 axis를 0, 1로 지정해줄 수 있다는 점이다.

axis = 0은 index에 대해서 n개의 샘플을 가져온다.
axis = 'index'라고 해도 되고, defaultaxis = 0이다.

df.sample(num=2, axis=0)
        num_lengs  num_wings	num_specimen_seen
falcon	      2     	2       	10
spider	      8     	0       	1

axis = 1은 column에 대해서 n개의 샘플을 가져온다.
axis = 'colunms'라고 해도 된다.

df.sample(n=2, axis=1)

       num_specimen_seen	num_lengs
falcon	      10            	2
dog	           2            	4
spider	       1	            8
fish	       8	            0

random state

random state는 임의의 숫자를 파라미터로 넣어줌으로써 샘플링의 재현을 가능하게 한다.

즉, 같은 random state 파라미터에 대해서는 계속 같은 모양의 sample이 나온다.


replace

중복을 허용해서 sampling할 것인가에 대한 인자이다. defaultFalse이고 True 일 경우 중복 허용이다.

df.sample(frac=0.5, replace=True)

아래 처럼 fish가 중복되어 나온 것을 알 수 있다.


       num_lengs	num_wings	num_specimen_seen
fish	    0	       0	           8
fish	    0	       0	           8
profile
___호기심 많은 씨앗___ 씨앗이 나무가 될 때까지 :D

0개의 댓글