为了更好地理解预处理的步骤,现在我们可以自己测试这些预处理的具体操作。
首先生成5个样本,分别为名称和年龄
dictionary = {
'name':['China','USA','Japan','India','England'],
'age':[1,2,None,4,5]
}
dic = pd.DataFrame(dictionary) #先将字典转化为pd形式
dic
name | age | |
0 | China | 1.0 |
1 | USA | 2.0 |
2 | Japan | NaN |
3 | India | 4.0 |
4 | England | 5.0 |
对所有样本的数值类型特征作正则分布标准化操作。
此时所有数值类型的均值为0,标准差为1,为缺失值填充均值0
numeric_dic = dic.dtypes[dic.dtypes != 'object'].index #获取数值类型列下标
print(numeric_dic)
#数值数据进行标准正态分布
dic[numeric_dic] = dic[numeric_dic].apply(
lambda x:(x - x.mean())/(x.std()))
#对所有缺失值填充均值0
dic[numeric_dic] = dic[numeric_dic].fillna(0)
dic
Index(['age'], dtype='object')
name | age | |
0 | China | -1.095445 |
1 | USA | -0.547723 |
2 | Japan | 0.000000 |
3 | India | 0.547723 |
4 | England | 1.095445 |
对于离散值,类似于 ‘name’ 使用热编码(one-hot)代替它们,如下
dic = pd.get_dummies(dic, dummy_na=True)
dic
age | name_China | name_England | name_India | name_Japan | name_USA | name_nan | |
0 | -1.095445 | 1 | 0 | 0 | 0 | 0 | 0 |
1 | -0.547723 | 0 | 0 | 0 | 0 | 1 | 0 |
2 | 0.000000 | 0 | 0 | 0 | 1 | 0 | 0 |
3 | 0.547723 | 0 | 0 | 1 | 0 | 0 | 0 |
4 | 1.095445 | 0 | 1 | 0 | 0 | 0 | 0 |