2013-04-10 97 views
51

有沒有辦法從Pandas中的DataFrame中選擇隨機行。熊貓數據框中的隨機行選擇

在R中,使用汽車包裝,有一個有用的功能some(x, n)它類似於頭部,但在這個例子中從x中隨機選擇10行。

我也看了切片文檔,似乎沒有任何等價物。

更新

現在使用版本20.有一個示例方法。

df.sample(n)

回答

31

是這樣的嗎?

import random 

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

謝謝@eumiro。我也研究過'df.ix [np.random.random_integers(0,len(df),10)]'也可以。 – John 2013-04-10 10:58:46

+6

如果你想使用numpy,那麼你也可以使用'df.ix [np.random.choice(df.index,10)]'。 – naught101 2014-02-17 02:53:40

+4

有人在另一篇文章中提到'np.random.choice'的速度是'random.sample'的兩倍[ – Phani 2014-07-07 19:00:28

2

其實這會給你重複指數np.random.random_integers(0, len(df), N)其中N是個大數目。

5

要做到這一點是從隨機模塊的採樣功能的最好辦法,

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

隨着熊貓版0.16.x,現在DataFrame.samplemethod built-in有:

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) 

對於以上兩種方法,你可以通過這樣做得到其餘的行:

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

感謝您指出@ryanjdillon。我沒有注意到這一點。 – John 2015-09-17 09:03:49

+5

@ryanjdillon哇!謝謝你的方式來獲得其餘的行 – 2015-12-31 16:29:26

0

下面的行將從數據框df中的現有行總數中隨機選擇n個行數而不進行替換。

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