博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
缺失值了解与简单处理
阅读量:2240 次
发布时间:2019-05-09

本文共 2055 字,大约阅读时间需要 6 分钟。

缺失值处理

目录

一、缺失值的概括

二、缺失值的产生

三、缺失值处理

四、对含有缺失值的列转换后的影响

一、缺失值的概括

缺失值从缺失的分布来讲可以分为完全随机缺失,随机缺失和完全非随机缺失。

完全随机缺失(missing completely at random,MCAR)指的是数据的缺失是随机的,数据的缺失不依赖于任 何不完全变量或完全变量。例如一个班有五名同学的数学成绩缺失,缺失原因是课代表去送卷子的时候,路上一阵 大风把卷子吹散了,找回来的时候少了五份试卷,完全随机的少了五个成绩,这种情况就是完全随机缺失 随机缺失(missing at random,MAR)指的是数据的缺失不是完全随机的,即该类数据的缺失依赖于其他完全变 量。例如缺失的五个数学成绩全是男生的,因为这个班的座次是一半男生一半女生,课代表收试卷的时候男生的试 卷全在上边,最先被风吹跑了五份,剩下的试卷被护住了,这五个成绩的缺失和学生考试成绩本身没关系,但是和学 生的座次有关系,这种情况就是随机缺失。

完全非随机缺失(missing not at random,MNAR)指的是数据的缺失依赖于不完全变量自身。例如缺失的五个数 学成绩是因为老师在判卷过程中,发现试卷的作答差的没法看,一气之下给撕了而导致成绩缺失,这个缺失只和成绩本身有关,与其他变量无关,这就是非随机缺失。

二、缺失值的产生

1、通过读取数据产生
data1=pd.read_excel('test3.xlsx') # 导入表格就存在缺失值#  判断缺失值比较稳定的方法  pd.isna()pd.isna(np.nan)
2、定义异常值为缺失值
#通过下面的命令执行,在数据框中性别的缺失值显示为NaN。 def f1(x):    if x in {
'男','女'}: return x else: return np.NaNdata1.性别=data1.性别.map(f1) data1# data1.isnull()缺失值显示为Ture,data1.isnull() # 等同于data1.isna()
#通过loc定义缺失值data1.loc[3,'性别']=None  # 将性别的第三行的值定义为None

三、缺失值处理

1、删除缺失值
data1.dropna(axis=0,how='any')# axis = 0 为表示行 ,inplace = True 表示会更改原数据(默认为False),how='any',表示只要存在一个缺失值就删除整行data1.dropna(axis=0,how='any',subset=['身高','体重']) # 身高和体重任意列存在缺失值,就删除整行
#求各个变量的缺失值比例 data1.isnull().sum()      #缺失值的个数data1.isnull().mean()   # 缺失值的比例
# 布尔索引data1[data1.身高.isnull()]  # 定位缺失值data1[(data1.身高.isnull())| (data1.性别.isnull())]  #  定位多处缺失值
2、填充缺失值
#  固定值填充data1['身高'].fillna(180,inplace=True)#上下文填充data1.性别.fillna(method='ffill')  # 前项填充data1.性别.fillna(method='bfill') #后项填充,所以最后一位如果有缺失值,不会填充# 其他列填充data1['性别'].fillna(data1['身高'])  # 用身高这列填充性别列# 线性插补  上下值的平均值填充data1["身高"]=data1.身高.interpolate()

四、对含有缺失值的列转换后的影响

# 用astype将列转化为strdata1=pd.read_excel("test3.xlsx")  # 导入表数据data1 data1.loc[3,"性别"]=None  # 定义缺失值data1 data1["性别1"]=data1["性别"].astype(str) # NaN缺失值采用astype(str)进行转换后变成了"nan"字符串.None变成了"None"字符串。data1 # 用astype将列转化为floatdata1['身高'].astype(str).astype(np.float) #字符串‘nan’,用astype,转化为float,会变成缺失值NaN。 # 用pd.to_numeric将列强制转化为数值pd.to_numeric(data1['性别'],errors='coerce')  # errors参数设定为coerce的意思是如果不是数值格式的字符串则会转化为缺失值。errors参数的默认值为raise, 那么转化出现错误的时候就会有错误提示。

转载地址:http://txqbb.baihongyu.com/

你可能感兴趣的文章
Leetcode C++ 随手刷 547.朋友圈
查看>>
手抄笔记:深入理解linux内核-1
查看>>
内存堆与栈
查看>>
Leetcode C++《每日一题》20200621 124.二叉树的最大路径和
查看>>
Leetcode C++《每日一题》20200622 面试题 16.18. 模式匹配
查看>>
Leetcode C++《每日一题》20200625 139. 单词拆分
查看>>
Leetcode C++《每日一题》20200626 338. 比特位计数
查看>>
Leetcode C++ 《拓扑排序-1》20200626 207.课程表
查看>>
Go语言学习Part1:包、变量和函数
查看>>
Go语言学习Part2:流程控制语句:for、if、else、switch 和 defer
查看>>
Go语言学习Part3:struct、slice和映射
查看>>
Go语言学习Part4-1:方法和接口
查看>>
Leetcode Go 《精选TOP面试题》20200628 69.x的平方根
查看>>
leetcode 130. Surrounded Regions
查看>>
【Python】详解Python多线程Selenium跨浏览器测试
查看>>
Jmeter之参数化
查看>>
Shell 和Python的区别。
查看>>
【JMeter】1.9上考试jmeter测试调试
查看>>
【虫师】【selenium】参数化
查看>>
【Python练习】文件引用用户名密码登录系统
查看>>