类别中的NaN

问题描述 投票:2回答:1

我正在尝试对应用程序上的数据集进行线性回归,而我分配的标签是应用程序的等级。尝试将标签拆分为多个类时,即使未指定,也存在第三类“ NaN”。

bins = (2, 3, 5)
group_names = ['bad', 'good']
appStore['user_rating'] = pd.cut(appStore['user_rating'], bins = bins, labels = group_names)
appStore['user_rating'].unique()

结果

[good, bad, NaN]
Categories (2, object): [bad < good]

我什至运行了代码

appStore.isnull().sum()

并且它不显示空值,所有字段的结果均为0。

编辑:我什至将bins编辑为bins =(0,3,5)来拆分数据,因为该列中的最小值为0,最大值为5。它仍然具有NaN。

这是我运行sns.countplot(appStore ['user_rating'])时的结果:

如您所见,将没有异常数据。

python machine-learning scikit-learn linear-regression data-science
1个回答
2
投票

使用pandas.cut()方法,我们可以像您一样使用bin边缘定义容器:

bins = (2, 3, 5)

意味着我们定义了两个有效类别:

一个值在(2和3)之间]的类别,另一个在(3和5)之间]的类别。这些类别之外的每个值的类别将为NaN

问题是,您的数据包含的值超出了您定义的时间间隔。我用一个例子演示它:

import pandas as pd

appStore = pd.DataFrame()
appStore['user_rating'] = [2.3, 3.3, 4, 6]

bins = (2, 3, 5)
group_names = ['bad', 'good']
appStore['user_rating'] = pd.cut(appStore['user_rating'], bins=bins, labels=group_names)
print(appStore['user_rating'].unique())

print()
print(appStore)

Out:

[bad, good, NaN]
Categories (2, object): [bad < good]

  user_rating
0         bad
1        good
2        good
3         NaN

如您所见,6既不在(2和3)

之间也不在(3和5)
之间。因此,基本上没有离群数据的标签,这就是为什么pandasNaN代替一个缺失的标签值的原因。

如果您的数据中没有异常值,则不会发生此问题:

import pandas as pd

appStore = pd.DataFrame()
appStore['user_rating'] = [2.3, 3.3, 4, 4.5]

bins = (2, 3, 5)
group_names = ['bad', 'good']
appStore['user_rating'] = pd.cut(appStore['user_rating'], bins=bins, labels=group_names)
print(appStore['user_rating'].unique())

print()
print(appStore)

Out:

[bad, good]
Categories (2, object): [bad < good]

  user_rating
0         bad
1        good
2        good
3        good

注意:

箱边缘向下排斥
向上包含,例如(1,2,3)边定义的箱将不包含1(它将分类为NaN),但将3定义为(2-3)
© www.soinside.com 2019 - 2024. All rights reserved.