69

パンダでかなり大きなCSVファイルを読み取って、2つのランダムなチャンクに分割しようとしています。1つはデータの10%で、もう1つは90%です。

これが私の現在の試みです:

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]

何らかの理由sklearnで、SVM分類器内でこれらの結果のDataFrameオブジェクトの1つを使用しようとすると、このエラーがスローされます。

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

私はそれを間違っていると思います。これを行うためのより良い方法はありますか?

4

5 に答える 5

81

どのバージョンのパンダを使用していますか?私にとってあなたのコードはうまく機能します(私はgitmasterを使用しています)。

別のアプローチは次のとおりです。

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)

新しいバージョン(0.16.1以降)はこれを直接サポートします:http: //pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.sample.html

于 2012-08-30T07:36:18.530 に答える
79

np.random.choice()NumPy1.7.0の新機能がこれに非常に適していることがわかりました。

たとえば、DataFrameと整数10からインデックス値を渡して、ランダムに均一にサンプリングされた10行を選択できます。

rows = np.random.choice(df.index.values, 10)
sampled_df = df.ix[rows]
于 2013-06-18T14:41:39.997 に答える
25

バージョン0.16.1の新機能:

sample_dataframe = your_dataframe.sample(n=how_many_rows_you_want)

ここのドキュメント:http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.sample.html

于 2015-11-17T22:53:28.787 に答える
15

Pandas 0.16.1には、そのためのサンプルメソッドがあります。

于 2015-06-22T03:13:46.380 に答える
6

pandas.read_csvを使用している場合は、skiprowsパラメーターを使用して、データの読み込み時に直接サンプリングできます。これは私がこれについて書いた短い記事です-https://nikolaygrozev.wordpress.com/2015/06/16/fast-and-simple-sampling-in-pandas-when-loading-data-from-files/

于 2015-06-16T04:24:11.907 に答える