机器学习之数据预处理——数据清洗缺失值、异常值和重复值的处理
基础知识
在数据清洗过程中,主要处理的是缺失值,异常值和重复值。所谓清洗,是对数据进行丢弃,填充,替换,去重等操作,实现去除异常,纠正错误,补足缺失的目的。
数据缺失分为2种:
- 行记录的缺失,这种情况又称为数据记录丢失;
- 数据列值的丢失,即由于各种原因导致的数据记录种某些列的值缺失。
这里重点讨论数据列类型缺失值的处理
技术点总结
通过pd.DataFrame新建数据框;
通过df.iloc[]来选择特定的列或对象;
使用Pandas的isnull()判断值是否为空;
使用all()和any()判断每列是否包含至少1个为True或者全部为True的情况;
使用Pandas的dropna()直接删除缺失值。
使用Sklearn.preprocessing中的Imputer方法对缺失值进行填充和替换,支持3种填充方法:mean(均值),median(中位数),most_frequent(众数);
使用Pandas的fillna填充缺失值,支持更多自定义的值和常用预定义法;
通过copy获取一个对象副本,常用于原始对象和复制对象同时进行操作的场景;
通过for循环遍历可迭代的列表值。
自定义Z-Score计算公式;
通过Pandas的duplicated()判断重复数据记录;
通过Pandas的drop_duplicates()删除重复记录,可指定特定的列或全部。
数据列缺失的处理方法
1、丢弃(缺失值处理)
1、生成一份随机数据
import numpy as np # 导入Numpy库
import pandas as pd # 导入Pandas库
# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1','col2','col3','col4']) # 生成一份数据
df.iloc[1, 1] = np.nan #增加缺失值
df.iloc[4, 3] = np.nan
print("生成缺失数据:")
print(df)
2、查看哪些值缺失
# 查看哪些值缺失
nan_all = df.isnull() # 获取所有数据框中的N值
print("查看哪些值缺失:")
print(nan_all) # 打印输出
3、获得含有NA的列
# 获得含有NA的列
nan_col = df.isnull().any() # 查找含有至少1个缺失值的列,any()方法用来返回指定轴中的任何元素为True
print("获得含有NA的列")
print(nan_col)
4、获取全部为NA的列
# 获得全部为NA的列
nan_col2 = df.isnull().all()
# 查找全部缺失值的列,其中all()方法用来返回指定轴的所有元素都为True
print("获取全部为NA的列")
print(nan_col2)
5、丢弃缺失值
df2 = df.dropna() # 直接丢弃含有NA的行记录
print(df2)
2、补全(缺失值处理)
相对于丢弃而言,补全是更加常用的缺失值处理方式,常用的补全方法有:
- 统计法:对于数值行的数据,使用均值,加权均值,中位数等方法补足;对于分类型数据,使用类别众数最多的值补足。
- 模型法
- 专家补全法
- 其他方法
1、使用sklearn将缺失值替换为特定值
使用这一列的均值代替NaN
import pandas as pd # 导入Pandas库
import numpy as np # 导入Numpy库
from sklearn.preprocessing import Imputer # 导入sklearn.preprocessing中的Imputer库
# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1','col2','col3','col4']) # 生成一份数据
df.iloc[1, 1] = np.nan #增加缺失值
df.iloc[4, 3] = np.nan
print(df)
nan_model = Imputer(missing_values='NaN', strategy='mean', axis=0) # 建立替换规则:将值为Nan的缺失值用均值做替换
nan_result = nan_model.fit_transform(df) # 应用模型规则
print("使用这一列的均值代替NaN")
print(nan_result)