본문 바로가기
데이터 분석/데이터 전처리

[Pandas] 8. 랜덤으로 행 추출하기

by 부자 꽁냥이 2020. 9. 12.

안녕하세요~ 꽁냥이에요!!

 

이번 포스팅에서는 데이터(행)를 랜덤으로 추출하는 방법에 대해서 알아볼 거예요.

 

1. 기본

2. 응용


   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개씩 비복원 추출이 된 것을 확인할 수 있습니다.


이번 포스팅에서는 랜덤으로 데이터를 추출하는 방법에 대해서 알아보았습니다. 궁금한 점, 잘못된 점, 하고 싶은 말은 댓글로 남겨주세요.

 

지금까지 꽁냥이의 글 읽어주셔서 감사합니다.


댓글


맨 위로