2016-04-05 53 views
0

我正在嘗試從熊貓數據框中進行訓練和測試。當我運行:Sklearn StratifiedShuffleSplit with pandas

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

我得到的錯誤:

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.

然而,這不是因爲我在運行時的情況:

df.event.value_counts() 

我得到:

irrelevant 5030 
event   394 

有什麼想法可能會導致這個問題?

+0

無法重現您的警告。出於好奇,什麼是「len(df)」? –

+0

5424.我只是嘗試了一個完全不同的csv,它工作正常,即時通訊不知道這是什麼引起的問題這個df。 – GNMO11

+0

在CSV中看起來像一個空行導致它 – GNMO11

回答

1

正如你在你的問題的評論中提到的那樣,它是導致錯誤的空行/行。

df['event'].value_counts()未顯示空行的原因是因爲pandas.Series.value_count()取可選參數dropna=True;此參數默認忽略所有null/NaN/np.nan/None值。下面是一個簡單例子來說明這一點:

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 

在輸出線6可以看到NaN出來作爲另一個類,雖然在默認情況下(輸出到線5)它不存在。如果你已經通過這個可選參數False,你會提前在空行上找到。

我希望這是有道理的!

+1

這太好了,以後會有幫助。 – GNMO11