J'essaie de lire un fichier CSV assez volumineux avec Pandas) et de le scinder en deux morceaux aléatoires, l'un représentant 10% des données et l'autre 90%.
Voici ma tentative actuelle:
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]
Pour une raison quelconque, sklearn
lève cette erreur lorsque j'essaie d'utiliser l'un de ces objets DataFrame obtenus à l'intérieur d'un classificateur SVM:
IndexError: each subindex must be either a slice, an integer, Ellipsis, or newaxis
Je pense que je le fais mal. Y a-t-il une meilleure manière de faire cela?
Quelle version de pandas utilisez-vous? Pour moi, votre code fonctionne bien (je suis sur git master).
Une autre approche pourrait être:
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 version la plus récente (à partir de la version 0.16.1) supporte directement ceci: http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sample.html
J'ai trouvé que np.random.choice()
new dans NumPy 1.7.0 fonctionne assez bien pour cela.
Par exemple, vous pouvez transmettre les valeurs d'index d'un DataFrame et le nombre entier 10 pour sélectionner 10 lignes échantillonnées de manière aléatoire.
rows = np.random.choice(df.index.values, 10)
sampled_df = df.ix[rows]
Nouveau dans la version 0.16.1:
sample_dataframe = your_dataframe.sample(n=how_many_rows_you_want)
doc ici: http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.sample.html
Les pandas 0.16.1 ont une méthode échantillon pour cela.
Si vous utilisez pandas.read_csv, vous pouvez directement échantillonner lors du chargement des données, en utilisant le paramètre skiprows. Voici un court article que j'ai écrit à ce sujet - https://nikolaygrozev.wordpress.com/2015/06/16/fast-and-simple-sampling-in-pandas-when-loading-data- à partir de fichiers /