我正在尝试从熊猫数据框制作培训和测试集。我跑的时候:
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 :(得分:2)
正如您在对问题的评论中提到的那样,导致错误的是空行/行。
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
传入,则您可以提前在空行中选择。
我希望这是有道理的!