2016-04-05 14 views
0

Bir pandalar veri kümesinden bir eğitim ve test seti yapmaya çalışıyorum. Ben çalıştırdığınızda: Ben olsunSklearn StratifiedShuffleSplit pandalarla

df.event.value_counts() 

:

irrelevant 5030 
event   394 
Ancak bu ı çalıştırdığınızda çünkü böyle değildir

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.

:

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

hatası alıyorum

Bu konuya ne sebep olabilecek herhangi bir fikrin var mı?

+0

Uyarılarınızı yeniden üretemezsiniz. Meraktan, len (df) 'nedir? –

+0

5424. Sadece tamamen farklı bir csv ile çalıştı ve iyi çalışıyor, sorun neden bu df hakkında ne olduğundan emin değilim. – GNMO11

+0

CSV'de boş bir satır gibi görünüyor Neden – GNMO11

cevap

1

Sorunuza yapılan bir yorumda bahsettiğiniz gibi, bu hataya neden olan boş satır/satırdı.

df['event'].value_counts() boş satırın gösterilmemesinin nedeni pandas.Series.value_count()dropna=True isteğe bağlı bir parametre almasıdır; Bu parametre, tüm boş/NaN/np.nan/None değerlerini varsayılan olarak yok sayar. İşte bu göstermek için bir örnek aşağıda verilmiştir: hattına çıktısında

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 

sen orada değil NaN varsayılan olarak (çıkış 5 hattına) her ne kadar başka sınıf olarak çıkageldi görebilirsiniz 6. Bu isteğe bağlı parametreyi False olarak geçmiş olsaydınız, boş satırda önceden almış olursunuz.

Umarım bu mantıklıdır!

+1

Bu harika, gelecekte faydalı olacaktır. – GNMO11

İlgili konular