Pandas: Muestreo una ttwig de datos

Estoy intentando leer un archivo CSV bastante grande con Pandas y dividirlo en dos partes aleatorias, una de las cuales es el 10% de los datos y la otra el 90%.

Aquí está mi bash actual:

rows = data.index row_count = len(rows) random.shuffle(list(rows)) data.reindex(rows) training_data = data[row_count // 10:] testing_data = data[:row_count // 10] 

Por alguna razón, sklearn lanza este error cuando bash usar uno de estos objetos DataFrame resultantes dentro de un clasificador SVM:

 IndexError: each subindex must be either a slice, an integer, Ellipsis, or newaxis 

Creo que lo estoy haciendo mal. ¿Hay una mejor manera de hacer esto?

¿Qué versión de pandas estás usando? Para mi tu código funciona bien (estoy en git master).

Otro enfoque podría ser:

 In [117]: import pandas In [118]: import random In [119]: df = pandas.DataFrame(np.random.randn(100, 4), columns=list('ABCD')) In [120]: rows = random.sample(df.index, 10) In [121]: df_10 = df.ix[rows] In [122]: df_90 = df.drop(rows) 

La versión más reciente (a partir de la versión 0.16.1) admite esto directamente: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sample.html

He encontrado que np.random.choice() nuevo en NumPy 1.7.0 funciona bastante bien para esto.

Por ejemplo, puede pasar los valores de índice de una ttwig de datos y el número entero y 10 para seleccionar 10 aleatorias filas uniformemente muestreados.

 rows = np.random.choice(df.index.values, 10) sampled_df = df.ix[rows] 

Nuevo en la versión 0.16.1:

 sample_dataframe = your_dataframe.sample(n=how_many_rows_you_want) 

doc aquí: http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.sample.html

Las pandas 0.16.1 tienen un método de muestra para eso.

Si está utilizando pandas.read_csv se puede degustar directamente al cargar los datos, utilizando el parámetro skiprows. Aquí hay un breve artículo que he escrito sobre esto: https://nikolaygrozev.wordpress.com/2015/06/16/fast-and-simple-sampling-in-pandas-when-loading-data-from-files/