안녕하세요~ 꽁냥이에요!!
이번 포스팅에서는 데이터(행)를 랜덤으로 추출하는 방법에 대해서 알아볼 거예요.
1. 기본
이번 포스팅에서 사용할 데이터를 먼저 준비할게요.
import pandas as pd
## 데이터 준비
data = {
'A':['apple','grape','pear','banana','orange'],
'B':[12,13,5,2,22]
}
df = pd.DataFrame(data)
pandas에서는 sample이라는 함수를 이용하여 데이터를 랜덤으로 추출할 수 있어요. sample 함수의 기본 사용법은 아래와 같아요.
df.sample(
n = '추출할 데이터 개수',
frac = '추출할 데이터 비율',
replace = True (복원), False (비복원)
)
sample 함수에 대한 자세한 설명은 여기를 참고하세요.
1. 특정 개수만큼 추출하기
꽁냥이는 2개의 데이터를 비복원으로 추출할 거예요. 비복원인 경우에는 n 인자에 전체 데이터 개수 이하의 숫자를 넣어주셔야 해요.
df.sample(n=2)
이번에는 복원으로 7개를 추출할 거예요.
df.sample(n=7, replace=True)
2. 특정 비율만큼 추출하기
꽁냥이는 전체 데이터의 20%를 비복원으로 추출할 거예요. 전체 데이터는 5개니까 20%이면 1개를 추출하는 것과 같아요. 비복원인 경우 frac 인자에 들어가는 값은 0~1입니다.
df.sample(frac=0.2)
이번에는 전체 데이터의 200%를 복원 추출할 거예요. 전체 데이터는 5개이므로 200%면 10개를 복원 추출하는 것과 같아요.
df.sample(frac=2, replace=True)
2. 응용
지금까지 배운 것을 이용하여 그룹별로 데이터를 2개씩 랜덤으로 비복원 추출해보도록 하겠습니다. 먼저 데이터를 만들어볼게요.
## 데이터 준비
df = pd.DataFrame()
group = ['A']*5+['B']*5+['C']*5
frequency = list(range(len(group)))
df['Group'] = group
df['Frequency'] = frequency
이제 코드를 통하여 그룹별로 데이터를 추출해볼까요?
sample_df = pd.DataFrame(columns=['Group','Frequency']) ## 데이터 초기값
for g in df['Group'].unique():
temp_df = df.query('Group==@g').sample(n=2) ## 그룹별 데이터 추출 및 2개 비복원 추출
sample_df = pd.concat([sample_df,temp_df]) ## 데이터 추가
sample_df = sample_df.reset_index(drop=True) ## 인덱스 초기화
line 3
먼저 그룹별로 데이터를 추출하고 이 데이터에서 비복원으로 2개의 데이터를 추출합니다.
코드를 실행하고 sampled_df에 담긴 데이터를 보시면 그룹별로 2개씩 비복원 추출이 된 것을 확인할 수 있습니다.
이번 포스팅에서는 랜덤으로 데이터를 추출하는 방법에 대해서 알아보았습니다. 궁금한 점, 잘못된 점, 하고 싶은 말은 댓글로 남겨주세요.
지금까지 꽁냥이의 글 읽어주셔서 감사합니다.
'데이터 분석 > 데이터 전처리' 카테고리의 다른 글
[Pandas] 10. 열/칼럼 이름 바꾸기 (0) | 2020.09.14 |
---|---|
[Pandas] 9. 데이터 결합(Join)하기 (0) | 2020.09.13 |
[Pandas] 7. 열 추가/삭제하기 (0) | 2020.09.12 |
[Pandas] 6. 특정 문자를 포함하는/특정 문자와 일치하는 행 추출하기 (10) | 2020.09.06 |
[Pandas] 5. 데이터프래임(DataFrame) 모든 행, 모든 열 출력하기 (4) | 2020.08.31 |
댓글