Existe uma maneira de selecionar linhas aleatórias de um DataFrame no Pandas.
Em R, usando o pacote car, existe uma função útil some(x, n)
semelhante à cabeça, mas seleciona, neste exemplo, 10 linhas aleatoriamente de x.
Também examinei a documentação sobre fatias e parece não haver nada equivalente.
Atualizar
Agora usando a versão 20. Existe um método de amostra.
df.sample(n)
df.sample(N, replace=True)
. Mais detalhes aqui .Respostas:
Algo assim?
Nota: A partir do Pandas v0.20.0,
ix
foi preterido em favor daloc
indexação baseada em rótulo.fonte
df.ix[np.random.random_integers(0, len(df), 10)]
também funcionaria.df.ix[np.random.choice(df.index, 10)]
.np.random.choice
é duas vezes mais rápidorandom.sample
Com a versão pandas
0.16.1
e superior, agora existe umDataFrame.sample
método incorporado :Para qualquer uma das abordagens acima, você pode obter o restante das linhas fazendo:
fonte
df_0.7
não é um nome válido. Além disso, sugiro substituirdf_rest = df.loc[~df.index.isin(df_0_7.index)]
pordf_rest = df.loc[df.index.difference(df_0_7.index)]
.difference()
?df_percent.index.get_indexer(df.index) == -1
é muito mais eficiente em vez (mas também mais feio) ...sample
A partir da v0.20.0, é possível usar
pd.DataFrame.sample
, que pode ser usado para retornar uma amostra aleatória de um número fixo de linhas ou uma porcentagem de linhas:Para reprodutibilidade, você pode especificar um número inteiro
random_state
, equivalente a usarnp.ramdom.seed
. Portanto, em vez de definir, por exemplonp.random.seed = 0
, você pode:fonte
A melhor maneira de fazer isso é com a função de amostra do módulo aleatório,
fonte
Na verdade, isso fornecerá índices repetidos
np.random.random_integers(0, len(df), N)
ondeN
há um número grande.fonte
A linha abaixo selecionará aleatoriamente n número de linhas do total de números de linhas existentes no dataframe df sem substituição.
df=df.take(np.random.permutation(len(df))[:n])
fonte