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

知道什么可能导致此问题吗?

正如您在问题的评论中提到的,是空行/行导致了错误。

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形式传入此可选参数,那么您将提前选择空行。

我希望这是有道理的!

相关内容

  • 没有找到相关文章

最新更新