¿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,
ix
ha quedado en desuso a favor de laloc
indexació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.choice
es dos veces más rápido querandom.sample
Con la versión de pandas
0.16.1
y superior, ahora hay unDataFrame.sample
método incorporado :Para cualquiera de los enfoques anteriores, puede obtener el resto de las filas haciendo:
fuente
df_0.7
No 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) == -1
es mucho más eficiente en su lugar (pero también más feo) ...sample
A 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 = 0
puede: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)
dondeN
hay 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