在实际的数据清洗过程中,我们经常会遇到数据内容丢失的情况,这些丢失的数据内容就是缺失值。缺失值的产生的原因多种多样,主要分为机械原因和人为原因。
机械原因,也就是由于例如,数据存储失败,存储器损坏,机械故障等原因,某段时间数据未能收集,或保存的失败,从而造成的数据缺失。人为原因,主要是由于人的主观失误、历史局限或有意隐瞒造成的数据缺失。比如,在市场调查中被访人拒绝透露相关问题的答案,或者回答的问题是无效的,数据录入人员失误漏录了数据。不管是哪种原因造成的,我们都必须对缺失数据进行妥善处理,才能更好的保证最终数据分析结果的正确性和准确性。下面小编就介绍几种缺失值处理常用的方法,希望对大家有所帮助。
1.删除
如果缺失值的个数只占整体很小一部分的情况下,可以删除缺失值。
这种方法是将存在缺失值的数据条目(包括:对象,元组,记录)进行删除。简单便捷,在对象有多个属性缺失值、被删除的含缺失值的对象的数据量只占信息表中的数据量一小部分的情况下是非常有效的。
python代码
import numpy as np import pandas as pd data = pd.read_csv('data.csv',encoding='GBK') # 将空值形式的缺失值转换成可识别的类型 data = data.replace(' ', np.NaN) print(data.columns)#['id', 'label', 'a', 'b', 'c', 'd'] #将每列中缺失值的个数统计出来 null_all = data.isnull().sum() #id 0 #label 0 #a 7 #b 3 #c 3 #d 8 #查看a列有缺失值的数据 a_null = data[pd.isnull(data['a'])] #a列缺失占比 a_ratio = len(data[pd.isnull(data['a'])])/len(data) #0.0007 #丢弃缺失值,将存在缺失值的行丢失 new_drop = data.dropna(axis=0) print(new_drop.shape)#(9981,6) #丢弃某几列有缺失值的行 new_drop2 = data.dropna(axis=0, subset=['a','b']) print(new_drop2.shape)#(9990,6)
2.均值、众数、中位数填充
均值填充:对每一列的缺失值,填充当列的均值。
中位数填充:对每一列的缺失值,填充当列的中位数。
众数填充:对每一列的缺失值,填充当列的众数。
python代码
data['a'] = data['a'].fillna(data['a'].means()) #中位数填充 data['a'] = data['a'].fillna(data['a'].median()) #众数填充 data['a'] = data['a'].fillna(stats.mode(data['a'])[0][0]) #用前一个数据进行填充 data['a'] = data['a'].fillna(method='pad') #用后一个数据进行填充 data['a'] = data['a'].fillna(method='bfill')
3.填充上下条的数据
对每一条数据的缺失值,填充其上下条数据的值。
python代码
train_data.fillna(method='pad', inplace=True) # 填充前一条数据的值,但是前一条也不一定有值 train_data.fillna(0, inplace=True) train_data.fillna(method='bfill', inplace=True) # 填充后一条数据的值,但是后一条也不一定有值 train_data.fillna(0, inplace=True)
4.填充插值得到的数据
interpolate()插值法,计算的是缺失值前一个值和后一个值的平均数。
python代码
data['a'] = data['a'].interpolate()
5.KNN填充
填充近邻的数据,先利用KNN计算临近的k个数据,然后填充他们的均值。
from fancyimpute import KNN fill_knn = KNN(k=3).fit_transform(data) data = pd.DataFrame(fill_knn) print(data.head()) #out 0 1 2 3 4 5 0 111.0 0.0 2.0 360.0 4.000000 1.0 1 112.0 1.0 9.0 1080.0 3.000000 1.0 2 113.0 1.0 9.0 1080.0 2.000000 1.0 3 114.0 0.0 1.0 360.0 *3.862873 *1.0 4 115.0 0.0 1.0 270.0 5.000000 1.0
6.随机森林填充
from sklearn.ensemble import RandomForestRegressor #提取已有的数据特征 process_df = data.ix[:, [1, 2, 3, 4, 5]] # 分成已知该特征和未知该特征两部分 known = process_df[process_df.c.notnull()].as_matrix() uknown = process_df[process_df.c.isnull()].as_matrix() # X为特征属性值 X = known[:, 1:3] # print(X[0:10]) # Y为结果标签 y = known[:, 0] print(y) # 训练模型 rf = RandomForestRegressor(random_state=0, n_estimators=200, max_depth=3, n_jobs=-1) rf.fit(X, y) # 预测缺失值 predicted = rf.predict(uknown[:, 1:3]) print(predicted) #将预测值填补原缺失值 data.loc[(data.c.isnull()), 'c'] = predicted print(data[0:10])以上就是小编给大家分享的python实现缺失值处理的几种方法,希望对大家缺失值的处理有所帮助。如果,大家在缺失值处理方面还有哪些好的方法,欢迎随时和小编交流。
数据分析咨询请扫描二维码
CDA数据分析师在中国航信高科技产业园进行了面向测试度量的数据分析培训课程,培训人数近2 ...
2024-05-01CDA数据分析师走进深圳迈瑞生物医疗电子股份有限公司,在迈瑞总部展开了为期两天的培训,本次课程参训人员线上及线下近百人, ...
2024-05-01CDA数据分析师在合肥市对合肥阳光新能源科技有限公司开展了为期8天的企业内训。 合肥阳光新能源科技 ...
2024-05-01CDA数据分析师走进海尔大学,进行了《数据治理与数据中台建设的道与术》专题培训,培训现场爆满,近百人参加了此次培训。 ...
2024-05-01在中国银行苏州分行培训中心开始数据分析师培训,此次培训课程共10天内容,包括Excel、MySQL、概率论与数理统计、SPSS等内容, ...
2024-05-01从实际的业务需求出发,结合行业的典型应用特点,围绕实际的商业问题,探讨数据挖掘、机器学习模型在金融领域的应用,包括获客、信用评分、细分画像、交叉销售、反欺诈、违规识别、时序预测、运筹优化、流程挖掘九个方面,形成 ...
2024-05-01本次培训课程为线上+线下的模式,由于学员编程能力不一、部分学员没有编程基础,故提供统计学、python基 ...
2024-05-01华夏银行信用卡中心-机器学习培训 1、课程亮点 取材于业界一流企业和顶级咨询公司的行业实践;已经被证明是人人 ...
2024-05-01主 题:数据中台建设及数据分析应用主题分享 1. 数据中台市场洞察 2. 主流数据中台产品比较 3. 某企业数据中 ...
2024-05-01围绕“数据驱动”战略,全力打造我行 300 人数字化人才梯队,着力培养数字化管理人才、大数据专业团队 ...
2024-05-01在当今数据驱动的商业环境中,数据分析成为了企业决策的重要依据。通过对大量数据的收集、处理和分析,企业能够更好地理解市场 ...
2024-04-29在人工智能(AI)的世界里,提示词(Prompt)是一种强大的工具,它能够引导AI按照用户的需求产生特定的输出。本文将深入探讨AI ...
2024-04-29CDA立足未来职场,拓展前沿视野——对外经贸大学保险学院举办“三全育人大讲堂”分享行业最新动态。 ...
2024-04-294月2日,CDA数据分析师创始发起人兼协会理事长赵坚毅博士受邀在浙江万里学院举办了一场以“数字化能力在职场中的作用” ...
2024-04-29随机森林(Random Forests)现在机器学习中比较火的一个算法,是一种基于Bagging的集成学习方法,能够很好地处理分类和回归的问 ...
2022-12-23方差分析是数据分析中常用的一种统计分析方法,接下来让我们简单了解一下方差分析的基本思想和原理吧。 方差分析(Analysis ...
2022-12-23来源:关于数据分析与可视化 关于streamlit-aggrid 数据排序 表格样式的调整 数据 ...
2022-08-03作者:麦叔 定义 「把上面晦涩的概念汇成一句话就是:」 ❝ 回调函数就是一个被作为参 ...
2022-08-03现今,高学历人群日益增多,物以稀为贵的高学历光环淡去。无论本科生还是研究生,甚至博士生,求职竞争力都大不如前,就业压力越来越大。
2022-06-01某家企业10个人面试,有9个本科生……如何脱颖而出,除得体的举止和良好的沟通力外,证书成重要筹码,这也是很多人考证的关键所在。
2022-04-14