缺失值和重复值的处理
一、缺失值处理:
1、缺失值产生的原因
缺失值的产生的原因多种多样,主要分为机械原因和人为原因。机械原因是由于机械原因导致的数据收集或保存的失败造成的数据缺失,比如数据存储的失败,存储器损坏,机械故障导致某段时间数据未能收集(对于定时数据采集而言)。人为原因是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失,比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。
2、缺失值的类型
缺失值从缺失的分布来讲可以分为完全随机缺失,随机缺失和完全非随机缺失。完全随机缺失(missing completely at random,MCAR)指的是数据的缺失是随机的,数据的缺失不依赖于任何不完全变量或完全变量。随机缺失(missing at random,MAR)指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变量。完全非随机缺失(missing not at random,MNAR)指的是数据的缺失依赖于不完全变量自身。
从缺失值的所属属性上讲,如果所有的缺失值都是同一属性,那么这种缺失成为单值缺失,如果缺失值属于不同的属性,称为任意缺失。另外对于时间序列类的数据,可能存在随着时间的缺失,这种缺失称为单调缺失。
#查看哪些缺失值
nan_all=df.isnull()#获得所有数据库中的N值
df.isnull().all()#获得全部为NA的列
df.isnull().any()#获得含有NA的列
3、 处理缺失值的方法:
丢弃:直接删除带有缺失值的记录(整行删除)
# df.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)axis=0 默认删除带缺失值的行 columns 1 index
how:any 或者all
thresh:int 至少有多少个df.dropna(subset=['col1','col2']) ### 删除指定列中包含缺失值的行
df.dropna(subset=['col1','col2'])
data.dropna(axis=0) #删除包含缺失值的行
data.dropna(how='all') print(data.drop(index=list('ac'))) ### 删除索引为‘ac’这2行,或print(data.drop(index=['a','c']))
print(data.drop([1,3],axis=1)) ### 删除列名为‘13’这2列inplace:True:更改原表
以下场景不宜用直接删除方法:
- 数据集总体中存在大量的数据记录不完整情况且比例较大,例如超过10% 删除后可能会损失过多有用信息;
- 带有缺失值的数据记录大量存在着明显的数据分布规律或特征,例如带有缺失值的数据记录的目标标签,如果删除会导致模型拟合或分类不准确
补全
- 统计法:使用均值、加权均值、中位数等方法补足;对于分类型数据,使用类别众数最多的值补足;
#通过sklearn的数据预处理方法对缺失值进行处理from sklearn.preprocessing import Imputer
nan_model=Imputer(missing_values='NaN',strategy='mean')
nan_model.fit_transform(d)#首先通过 Imputer方法创建一个预处理对象,
missing_values为默认缺失值的字符串,默认为 NaN;
示例中选择缺失值替换方法是均值(默认),还可以选择使用中位数和众数进行替换,即 strategy值设置为 median或 most_frequent;
后面的参数 axis用来设置输入的轴,默认值为0,即使用列做计算逻辑。
##使用pandas用后面的值填充
d.fillna(method='backfill)#使用后面的值填充
d.fillna(method='bfill)#使用后面的值填充d.fillna(method='padfill')#使用前面的值填充
d.fillna(method='ffill')#使用前面的值填充d.fillna(method='padfill',limit=1)#使用前面的值填充,限制每列只能替换一个缺失值df.fillna(0) # 用确定的值填充df.fillna({'col2': 1.1, 'col4': 1.2}) 不同列用不同值填充df.fillna(df.mean()['col2':'col4']) # 选择各自列的平均值填充
- 模型法:基于已有的其他字段,将缺失值字段作为目标变量进行预测。如果缺失值为数值变量,采用回归模型补全,如果是分类变量,则采用分类模型补全;
- 专家补全
- 其他方法:随机法、特殊值法、多重填补
真值转换:承认缺失值的存在,并且把数据缺失也作为数据分布规律的一部分,将变量的实际值和缺失值作为变量值参与模型计算。
2.2 重复值观察与处理
- 数据值完全相同的多条数据记录。这是最常见的数据重复情况。
- 数据主体相同但匹配到的唯一属性值不同。这种情况多见于数据仓库中的变化维度表,同一个事实表的主体会匹配同一个属性的多个值。
去重是重复值处理的主要方法,主要目的是保留能显示特征的唯一数据记录。但当遇到以下几种情况时,请慎重(不建议)执行数据去重:
- 重复的记录用于分析演变规律
- 重复的记录用于样本不均衡处理
- 重复的记录用于检测业务关系
查看重复值
df[df.duplicated()]
df.drop_duplicates().head() #去除重复值,默认保存第一个
2.3 特征观察与处理
数值型特征一般可以直接用于模型的训练,但有时候为了模型的稳定性及鲁棒性会对连续变量进行离散化。(连续性与离散型)
文本型特征往往需要转换成数值型特征才能用于建模分析。
对年龄进行分箱(离散化)处理
(1) 分箱操作是什么?
一种离散化方法(2) 将连续变量Age平均分箱成5个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'], 5,labels = ['1','2','3','4','5'])(3) 将连续变量Age划分为[0,5) [5,15) [15,30) [30,50) [50,80)五个年龄段,并分别用类别变量12345表示
df['AgeBand'] = pd.cut(df['Age'],[0,5,15,30,50,80],labels = ['1','2','3','4','5'])(4) 将连续变量Age按10% 30% 50 70% 90%五个年龄段,并用分类变量12345表示
df['AgeBand'] = pd.qcut(df['Age'],[0,0.1,0.3,0.5,0.7,0.9],labels = ['1','2','3','4','5'])
对文本变量进行转换
(1) 查看文本变量名及种类df['Sex'].value_counts()
df['Sex'].unique()
(2) 将文本变量Sex, Cabin ,Embarked用数值变量12345表示df['Sex_num'] = df['Sex'].replace(['male','female'],[1,2])
df['Sex_num'] = df['Sex'].map({'male': 1, 'female': 2})#方法三: 使用sklearn.preprocessing的LabelEncoder
from sklearn.preprocessing import LabelEncoder
for feat in ['Cabin', 'Ticket']:lbl = LabelEncoder() label_dict = dict(zip(df[feat].unique(), range(df[feat].nunique())))df[feat + "_labelEncode"] = df[feat].map(label_dict)df[feat + "_labelEncode"] = lbl.fit_transform(df[feat].astype(str))(3) 将文本变量Sex, Cabin, Embarked用one-hot编码表示
for feat in ["Age", "Embarked"]:x = pd.get_dummies(df[feat], prefix=feat)df = pd.concat([df, x], axis=1)(4)从纯文本Name特征里提取出Titles的特征(所谓的Titles就是Mr,Miss,Mrs等)
df['Title'] = df.Name.str.extract('([A-Za-z]+)\.', expand=False)
部分摘自<python 数据化分析与运营>
缺失值和重复值的处理相关推荐
- datacombo重复值的处理_Pandas入门【S1E3】缺失值和重复值处理
导语: 前两期分别就pandas安装和导入数据.pandas数据探索做了梳理. 回顾如下: Pandas安装和数据导入mp.weixin.qq.com Pandas数据探索mp.weixin.qq ...
- Pandas数据分析17——pandas数据清洗(缺失值、重复值处理)
参考书目:<深入浅出Pandas:利用Python进行数据处理与分析> pandas对大数据有很多便捷的清洗用法,尤其针对缺失值和重复值.缺失值就不用说了,会影响计算,重复值有时候可能并未 ...
- python数据预处理_Python数据预处理——缺失值、重复值
一.缺失值处理 isnull( ) .fillna( ) .dropna( ) (1)查看 缺失 查看数据集缺失,返回每列的缺失个数 df.isnull().sum() 查看某字段有缺失的行 df[d ...
- Python Pandas DataFrame 删除缺失值 None Nan drop dropna 替换缺失值 fillna 重复值删除 duplicate 数值替换 replace apply
一.获取缺失值. 二.剔除缺失值. 三.缺失值补全. 四.重复值剔除(按照行和列). 五.数值转换. 原始数据展示.数据下载链接 https://download.csdn.net/download/ ...
- python-数据分析-(12)pandas数据清洗、缺失值、重复值、异常值处理常见方法
一.导入模块 import pandas as pd from scipy.interpolate import interp1d 二.读取excel文件 data=pd.read_excel(r'E ...
- 【数据科学】05 数据合并(merge、concat、combine)与数据清洗(缺失值、重复值、内容和格式)
文章目录 1. 数据合并 1.1 merge()合并 1.2 concat()合并 1.3 combine()合并 2. 数据清洗 2.1 缺失值 2.2 重复值 2.3 内容与格式清洗 1. 数据合 ...
- python学习——缺失值、重复值处理及替换
文章目录 1 缺失值处理 1.1 查看缺失值 df.isnull() 1.2 统计缺失值 df.isnull().sum() 1.3 删除缺失值 df.drop() 1.4 填充缺失值 df.fill ...
- Python_Pandas_处理数据的缺失值和重复值
一.处理数据的缺失值 描述 使用isnull()函数可以判断数据表中的哪个值是缺失值,并将缺失值标记为True,非缺失值标记为False 使用dropna函数可以删除数据表中含有缺失值的行.默认情况下 ...
- Python中数据清洗缺失值,重复值和异常值的处理
1 缺失值的处理 1.1 常规缺失值的处理 np.nan,NaN,None,NaT(时间数据类型的缺失值)等 df.isnull() 1.判断每一个df中的数据是否为缺失值,是则返回True,否则返回 ...
- python数据清洗与准备:缺失值、重复值、异常值处理
目录 一.缺失值处理 (1)判断缺失值 (2)去掉缺失值 (3)填补缺失值 (二)重复值处理(针对于dataframe里面的重复行) (1)判断是否重复出现 (2)处理重复行 三.异常值处理 (1)挑 ...
最新文章
- 如何“正确”为SharePoint字段命名
- 【BZOJ4764】弹飞大爷 LCT
- 使用python和树莓派实现远程监控
- Python 计算机视觉(九)—— OpenCV进行图像平滑
- php echo 前后有字符串,php echo 输出字符串函数详解、多行输出方法
- snmp协议_SNMP开发和使用
- angular4获得焦点事件_深究AngularJS——如何获取input的焦点(自定义指令)
- 桃李春风一杯酒,江湖夜雨十年灯 - 老兵夜话DPDK
- Revit API切换三维视图
- JavaWeb后端开发框架SSM+前端框架Layui简介
- 硬件基础知识-二极管基础
- Hadoop学习 第4-6章 Hadoop数据压缩、Yarn和企业优化
- 卷积神经网络的网络结构——Hourglass
- 程序员真的需要一台 Mac 吗?
- Goland嗖嗖的: 快捷键,自动生成代码等效率小技巧
- 好雨云使用OKRs做绩效管理
- 在隐身模式下使用 Chrome 扩展程序
- a上标3下标6算法_A上标3下标6算法
- 奇怪,奇怪,不过想想在中国酒不奇…
- php emoji表情,PHP处理字符中的emoji表情