05-05. 샘플 추출 (sample)
DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None, ignore_index=False)
개요
sample 메서드는 DataFrame이나 Series에서 무작위로 몇개의 값(레이블)을 출력하는 메서드입니다.
사용법
기본 사용법
df.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None, ignore_index=False)
n : 추출할 갯수 입니다. replace가 False면 n의 최댓값은 레이블의 갯수를 넘을수 없습니다.
frac : 추출할 비율입니다. 1보다 작은값으로 설정하며(예 : 0.3 이면 30%), n과 동시에 사용할 수 없습니다.
replace : 중복추출의 허용 여부 입니다. True로 하면 중복추출이 가능하며 n의 최댓값이 레이블의 갯수보다 커도 됩니다.
weight : 가중치입니다. 즉 레이블마다 추출될 확률을 지정할 수 있습니다. 합계가 1(100%)이 아닐경우 자동으로 1로 연산합니다.
random_state : 랜덤 추출한 값에 시드를 설정할 수 있습니다. 원하는 값을 설정하면, 항상 같은 결과를 출력합니다.
axis : {0 : index / 1 : columns} 추출할 레이블입니다.
ignore_index : index의 무시 여부입니다. True일경우 출력시 index를 무시하고 숫자로 출력합니다.
예시
먼저 간단한 5x3짜리 데이터를 만들어보겠습니다.
col = ['col1','col2','col3']
row = ['row1','row2','row3','row4','row5']
data = [[1,2,3],[4,5,6],[7,8,9],[10,11,12],[13,14,15]]
df = pd.DataFrame(data,row,col)
print(df)
>>
col1 col2 col3
row1 1 2 3
row2 4 5 6
row3 7 8 9
row4 10 11 12
row5 13 14 15
n의 사용과 replcae의 사용
n을 설정함으로써 원하는 갯수의 추출이 가능합니다. n을 2로 설정함으로써 2개의 행이 추출된것을 볼 수 있습니다.
print(df.sample(2))
>>
col1 col2 col3
row1 1 2 3
row4 10 11 12
행이 5이지만 replace=True로 설정하여 중복 추출을 허용한다면, n이 5보다 커도 됩니다.
print(df.sample(10,replace=True))
>>
col1 col2 col3
row2 4 5 6
row3 7 8 9
row5 13 14 15
row1 1 2 3
row4 10 11 12
row2 4 5 6
row3 7 8 9
frac를 사용하는경우
frac을 통해 전체에대한 추출 비율을 정할 수 있습니다. frac을 0.4로 설정하므로써, 전체에서 40%인 2개를 추출해보겠습니다.
print(df.sample(frac=0.4))
>>
col1 col2 col3
row1 1 2 3
row5 13 14 15
weights를 통한 가중치의 사용
먼저 가중치를 적용하기위해 5짜리 Series를 하나 만들어보겠습니다.
s = pd.Series(data=[10,10,3,3,1],index=row)
print(s)
>>
row1 10
row2 10
row3 3
row4 3
row5 1
dtype: int64
이제 이 Series s를 weights에 적용시켜보겠습니다. 가장 가중치가 높은 row1, row2가 추출된 것을 확인할 수 있습니다.
물론 가중치가 적더라도 확률적으로 추출될 가능성이 존재합니다.
print(df.sample(2,weights=s))
>>
col1 col2 col3
row2 4 5 6
row1 1 2 3
random_state를 통한 동일값 재출력 허용
random_state에 원하는 값을 설정하므로써 출력 결과를 동일하게 다시 출력하는것이 가능합니다.
print(df.sample(5,random_state=7))
>>
col1 col2 col3
row1 1 2 3
row4 10 11 12
row3 7 8 9
row2 4 5 6
row5 13 14 15
위 과정을 통해 row1, row2, row3, row4, row5가 출력되고 random_state에 7을 부여했습니다.
동일한 내용으로 다시 출력하면 같은 값이 아래와 같이 재현됨을 알 수 있습니다.
print(df.sample(5,random_state=7))
>>
col1 col2 col3
row1 1 2 3
row4 10 11 12
row3 7 8 9
row2 4 5 6
row5 13 14 15
ignore_index의 사용
ignore_index를 True로 하면 index는 사라지고 순서대로 번호가 부여됩니다.
print(df.sample(3,ignore_index=True))
>>
col1 col2 col3
0 10 11 12
1 7 8 9
2 13 14 15
'파이썬완전정복-Pandas DataFrame > 05. 비교 & 필터링' 카테고리의 다른 글
Pandas DataFrame 05-04. 레이블 필터링 (filter) (0) | 2022.01.17 |
---|---|
Pandas DataFrame 05-03. 임계값 적용 (clip) (0) | 2022.01.17 |
Pandas DataFrame 05-02. dtype기반 열 선택 (select_dtyps) (0) | 2022.01.17 |