如何将年龄分级功能替换为数值数据?

时间:2018-06-10 14:49:44

标签: python pandas scikit-learn

我已从agebin列创建了age列。我有ages的范围,但如何将它们转换为agebin数值数据类型,因为我想检查agebin是否是重要的功能。

我尝试使用以下代码进行年龄分级:

    traindata = data.assign(age_bins =  pd.cut(data.age, 4, retbins=False, include_lowest=True))

    data['agebin'] = traindata['age_bins']

data['agebin'].unique()

[[16.954, 28.5], (28.5, 40], (40, 51.5], (51.5, 63]]
Categories (4, object): [[16.954, 28.5] < (28.5, 40] < (40, 51.5] < (51.5, 63]]

我尝试了什么:

data['enc_agebin'] = data.agebin.map({[16.954, 28.5]:1,(28.5, 40]:2,(40, 51.5]:3,(51.5, 63]:4})

我尝试映射每个范围并将其转换为数字,但我收到语法错误。请建议一些将agebin转换为数字数据的好方法。

1 个答案:

答案 0 :(得分:1)

我认为cut中需要参数labels

data = pd.DataFrame({'age':[10,20,40,50,44,56,12,34,56]})

data['agebin'] = pd.cut(data.age,bins=4,labels=range(1, 5), retbins=False,include_lowest=True)
print (data)
   age agebin
0   10      1
1   20      1
2   40      3
3   50      4
4   44      3
5   56      4
6   12      1
7   34      3
8   56      4

或使用labels=False,然后第一个bin为0,最后一个3(如range(4)):

data['agebin'] = pd.cut(data.age, bins=4, labels=False, retbins=False, include_lowest=True)
print (data)
   age  agebin
0   10       0
1   20       0
2   40       2
3   50       3
4   44       2
5   56       3
6   12       0
7   34       2
8   56       3