2013-04-10 2 views
51

Có cách nào để chọn các hàng ngẫu nhiên từ một DataFrame trong Pandas hay không.Lựa chọn hàng ngẫu nhiên trong Pandas dataframe

Trong R, sử dụng gói ô tô, có chức năng hữu ích some(x, n) tương tự như đầu nhưng chọn, trong ví dụ này, 10 hàng ngẫu nhiên từ x.

Tôi cũng đã xem tài liệu cắt và dường như không có gì tương đương.

Cập nhật

Hiện đang sử dụng phiên bản 20. Có phương pháp mẫu.

df.sample(n)

Trả lời

31

Cái gì đó như thế này?

import random 

def some(x, n): 
    return x.ix[random.sample(x.index, n)] 
+3

Cảm ơn @eumiro. Tôi cũng phát hiện ra rằng 'df.ix [np.random.random_integers (0, len (df), 10)]' cũng sẽ hoạt động. – John

+6

Nếu bạn muốn dùng numpy, bạn cũng có thể làm 'df.ix [np.random.choice (df.index, 10)]'. – naught101

+4

Ai đó trong một bài đăng khác đã đề cập rằng 'np.random.choice' nhanh gấp hai lần' random.sample' – Phani

2

Thực tế việc này sẽ cung cấp cho bạn chỉ số lặp lại np.random.random_integers(0, len(df), N) trong đó N là số lớn.

5

Cách tốt nhất để làm điều này là với chức năng mẫu từ module ngẫu nhiên,

import numpy as np 
import pandas as pd 
from random import sample 

# given data frame df 

# create random index 
rindex = np.array(sample(xrange(len(df)), 10)) 

# get 10 random rows from df 
dfr = df.ix[rindex] 
98

Với phiên bản gấu trúc 0.16.x, hiện nay một DataFrame.samplemethod built-in là:

import pandas 

df = pandas.DataFrame(data) 

# Randomly sample 70% of your dataframe 
df_0.7 = df.sample(frac=0.7) 

# Randomly sample 7 elements from your dataframe 
df_7 = df.sample(n=7) 

Đối với cả hai phương pháp trên , bạn có thể nhận được phần còn lại của các hàng bằng cách thực hiện:

df_rest = df.loc[~df.index.isin(df_0.7.index)] 
+0

Cảm ơn bạn đã chỉ ra rằng @ryanjdillon. Tôi đã không nhận thấy điều đó. – John

+5

@ryanjdillon WOW !! cảm ơn cho cách để có được phần còn lại của các hàng –

0

Dòng dưới đây sẽ chọn ngẫu nhiên n số hàng trong số tổng số hàng hiện có từ dataframe df mà không cần thay thế.

df=df.take(np.random.permutation(len(df))[:n])