2013-04-10 14 views
51

C'è un modo per selezionare le righe casuali da un DataFrame in Pandas.Selezione casuale delle righe nel dataframe Pandas

In R, utilizzando il pacchetto auto, esiste una funzione utile some(x, n) simile alla testina ma che seleziona, in questo esempio, 10 righe a caso da x.

Ho anche esaminato la documentazione delle sezioni e non sembra esserci nulla di equivalente.

Aggiornamento

Ora utilizzando la versione 20. C'è un metodo di campionamento.

df.sample(n)

risposta

31

qualcosa di simile?

import random 

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

Grazie @ eumiro. Ho anche capito che 'df.ix [np.random.random_integers (0, len (df), 10)]' avrebbe funzionato anche. – John

+6

Se vuoi usare numpy, puoi anche fare 'df.ix [np.random.choice (df.index, 10)]'. – naught101

+4

Qualcuno in un altro post ha detto che 'np.random.choice 'è due volte più veloce di' random.sample' – Phani

2

In realtà questo vi darà indici ripetuti np.random.random_integers(0, len(df), N) dove N è un gran numero.

5

Il modo migliore per farlo è con la funzione di esempio dal modulo casuale,

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

Con pandi versione 0.16.x, v'è ora una 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) 

Per entrambe le soluzioni sopra , è possibile ottenere il resto delle righe facendo:

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

Grazie per averlo indicato @ryanjdillon. Non l'avevo notato. – John

+5

@ryanjdillon WOW !! grazie per aver trovato il resto delle righe –

0

Sotto la riga verrà selezionato casualmente n numero di righe fuori dai numeri di riga esistenti totali dal datafame df senza sostituzione.

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