2016-04-05 33 views
0

私はpandasデータフレームからトレーニングとテストセットを作成しようとしています。私は実行すると:Sklearn StratifiedShuffleSplit with pandas

sss = StratifiedShuffleSplit(df['event'], n_iter=3, test_size=0.2) 

を私はエラーを取得する:私が得る

df.event.value_counts() 

irrelevant 5030 
event   394 

ValueError: The least populated class in y has only 1 member, which is too few. The minimum number of labels for any class cannot be less than 2.

私が実行したときしかし、このケースではありません

この問題の原因は何ですか?

+0

警告を再現できません。好奇心の外に、 'len(df)'とは何ですか? –

+0

5424.私はちょうど全く異なるcsvで試してみましたが、うまくいきました。問題を引き起こしているこのdfについて何がわからないのですか? – GNMO11

+0

CSVの空白行のように見えます – GNMO11

答えて

1

あなたの質問へのコメントに言及したように、それはエラーを引き起こしていた空の行/行でした。

df['event'].value_counts()が空行を表示しなかったのは、がオプションのパラメータdropna=Trueを取るためです。このパラメータは、デフォルトですべてのnull/NaN/np.nan/Noneの値を無視します。あなたは、デフォルトでは(出力が5行目に)それはありませんが、NaNが別のクラスとして起動しますことがわかります6ラインへの出力で

In [1]: import pandas as pd 

In [2]: import numpy as np 

In [3]: df = pd.DataFrame(columns=['a']) 

In [4]: df['a'] = ['so', 'map', 'map', 'lol', np.nan, 'so', 'so', 'so', 'lol', np.nan] 

In [5]: df['a'].value_counts() 
Out[5]: 
so  4 
lol 2 
map 2 
dtype: int64 

In [6]: df['a'].value_counts(dropna=False) 
Out[6]: 
so  4 
lol 2 
map 2 
NaN 2 
dtype: int64 

:ここではこれを示すための簡単な例です。このオプションのパラメータをFalseとして渡した場合は、事前にヌル行を取得していたはずです。

これは意味があると思います!

+1

これは素晴らしいことです、将来役立つでしょう。 – GNMO11