在机器学习和数据挖掘的实际场景中,数据一般都不会像Sklearn给我们提供的数据那么完美,难免会有一些缺失值,所以在做数据预处理时,对缺失值的处理,是必不可少的一个步骤。
本文介绍两种常见的处理方式:填充和删除。缺失比例较大的字段一般采用填充,缺失比例很小的数据,一般会删除整行。本文依然以泰坦尼克号的数据做演示。
Pandas处理数据
一般场景下,用 Pandas 处理数据会更简单。
import pandas as pd
data = pd.read_csv('./datas/titanic.csv')
# data.info()
# 5 Age 714 non-null float64
# 11 Embarked 889 non-null object
# Age列有177个缺失值,填充中位数
data['Age'] = data['Age'].fillna(data['Age'].median())
# Embarked列有2个缺失值,直接删除对应列
# 删除DataFrame里某一列有空值的行
data.dropna(subset=['Embarked'], inplace=True)
Sklearn处理数据
from sklearn.impute import SimpleImputer
import pandas as pd
data = pd.read_csv('./datas/titanic.csv')
# 填充Age字段
Age = data['Age'].values.reshape(-1, 1) # sklearn特征矩阵必须是二维
imp_mean = SimpleImputer() # 默认填充均值
imp_median = SimpleImputer(strategy='median') # 填充中值
imp_0 = SimpleImputer(strategy='constant', fill_value=0) # 填充0
Age_mean = imp_mean.fit_transform(Age)
Age_median = imp_median.fit_transform(Age)
Age_0 = imp_0.fit_transform(Age)
data['Age'] = Age_median
# 填充Embarked字段
Embarked = data['Embarked'].values.reshape(-1, 1)
imp_mode = SimpleImputer(strategy='most_frequent') # 众数填充
data['Embarked'] = imp_mode.fit_transform(Embarked)
data.info()
由以上代码量可以看出,用Pandas处理缺失值会更简单。但如果有特殊需求,比如用随机森林填充缺失值,则可以使用Sklearn的填充方法。
本文为 陈华 原创,欢迎转载,但请注明出处:http://www.chenhuax.com/read/263
- 上一篇:
- 快速排序算法
- 下一篇:
- Sklearn分类特征和标签编码