我正在尝试对应用程序上的数据集进行线性回归,而我分配的标签是应用程序的等级。尝试将标签拆分为多个类时,即使未指定,也存在第三类“ 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'])时的结果:
如您所见,将没有异常数据。
使用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
如您所见,
之间也不在(3和5)6
既不在(2和3)
pandas
用NaN
代替一个缺失的标签值的原因。如果您的数据中没有异常值,则不会发生此问题:
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)
。