¿Hay alguna manera de seleccionar filas aleatorias de un DataFrame en Pandas?
En R, usando el paquete de automóvil, hay una función útil some(x, n)que es similar a head pero selecciona, en este ejemplo, 10 filas al azar de x.
También he mirado la documentación de corte y parece que no hay nada equivalente.
Actualizar
Ahora usando la versión 20. Hay un método de muestra.
df.sample(n)

df.sample(N, replace=True). Más detalles aquí .Respuestas:
¿Algo como esto?
Nota: A partir de Pandas v0.20.0,
ixha quedado en desuso a favor de lalocindexación basada en etiquetas.fuente
df.ix[np.random.random_integers(0, len(df), 10)]también funcionaría.df.ix[np.random.choice(df.index, 10)].np.random.choicees dos veces más rápido querandom.sampleCon la versión de pandas
0.16.1y superior, ahora hay unDataFrame.samplemétodo incorporado :Para cualquiera de los enfoques anteriores, puede obtener el resto de las filas haciendo:
fuente
df_0.7No es un nombre válido. Además, sugiero reemplazardf_rest = df.loc[~df.index.isin(df_0_7.index)]condf_rest = df.loc[df.index.difference(df_0_7.index)].difference()?df_percent.index.get_indexer(df.index) == -1es mucho más eficiente en su lugar (pero también más feo) ...sampleA partir de v0.20.0, puede usar
pd.DataFrame.sample, que puede usarse para devolver una muestra aleatoria de un número fijo de filas, o un porcentaje de filas:Para la reproducibilidad, puede especificar un número entero
random_state, equivalente al usonp.ramdom.seed. Entonces, en lugar de configurar, por ejemplo,np.random.seed = 0puede:fuente
La mejor manera de hacerlo es con la función de muestra del módulo aleatorio,
fuente
En realidad, esto le dará índices repetidos
np.random.random_integers(0, len(df), N)dondeNhay un gran número.fuente
La línea inferior seleccionará aleatoriamente n número de filas del total de números de fila existentes del marco de datos df sin reemplazo.
df=df.take(np.random.permutation(len(df))[:n])fuente