我正在尝试从熊猫数据帧制作训练和测试集。当我运行时:
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
知道什么可能导致此问题吗?
正如您在问题的评论中提到的,是空行/行导致了错误。
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
形式传入此可选参数,那么您将提前选择空行。
我希望这是有道理的!