pandas如何处理缺失值
作者:修炼之路 发布时间:2021-04-10 12:42:35
在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用pandas来处理缺失值。常见的缺失值处理方式有,过滤、填充。
一、缺失值的判断
pandas使用浮点值NaN(Not a Number)表示浮点数和非浮点数组中的缺失值,同时python内置None值也会被当作是缺失值。
a、Series的缺失值判断
s = Series(["a","b",np.nan,"c",None])
print(s)
'''
0 a
1 b
2 NaN
3 c
4 None
'''
#判断缺失值,如果是则返回True,否则返回False
print(s.isnull())
'''
0 False
1 False
2 True
3 False
4 True
'''
#输出缺失值的索引和值
print(s[s.isnull()])
'''
2 NaN
4 None
'''
b、DataFrame的缺失值判断
a = [[1,np.nan,2],[3,4,None]]
data = DataFrame(a)
#DataFrame的None值变成了NaN
print(data)
'''
0 1 2
0 1 NaN 2.0
1 3 4.0 NaN
'''
print(data.isnull())
'''
0 1 2
0 False True False
1 False False True
'''
print(data[data.isnull()])
'''
0 1 2
0 NaN NaN NaN
1 NaN NaN NaN
'''
注意:在使用Series和DataFrame的时候,如果其中有值为None,Series会输出None,而DataFrame会输出NaN,但是对空值判断没有影响。DataFrame使用isnull方法在输出空值的时候全为NaN,因为DataFrame对于False对应的位置,输出值会使用NaN代替,而Series对于Fasel对应的位置是没有输出值的。
二、过滤缺失数据
a、Series的缺失值过滤
s = Series(["a","b",np.nan,"c",None])
#通过使用notnull方法来获取非缺失数据
print(s[s.notnull()])
'''
0 a
1 b
3 c
'''
#使用dropna方法删除缺失数据,返回一个删除后的Series
print(s.dropna())
'''
0 a
1 b
3 c
'''
#并没有在原来的Series上进行直接删除
print(s)
'''
0 a
1 b
2 NaN
3 c
4 None
'''
#通过设置inplace参数为True,在原Series上进行删除,不会返回Series
print(s.dropna(inplace=True))
#None
print(s)
'''
0 a
1 b
3 c
'''
b、DataFrame的缺失值过滤
DataFrame删除缺失值相对于Series而言就要复杂一些,也许有的时候你是想删除含有缺失值的行或列,也许有时候你需要删除的是,当整行或整列全为缺失值的时候才删除,好在pandas对于这两种情况都有相对应的处理方法。
1、删除含有缺失值的行和列
a = [[1, np.nan, 2],[9,None,np.nan],[3, 4, None],[5,6,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1 NaN 2.0
1 9 NaN NaN
2 3 4.0 NaN
3 5 6.0 7.0
'''
#使用dropna方法删除含有缺失值的行,默认是行
print(data.dropna())
'''
0 1 2
3 5 6.0 7.0
'''
#删除含有缺失值的列
print(data.dropna(axis=1))
'''
0
0 1
1 9
2 3
3 5
'''
2、删除全为NaN的行和列
a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1.0 NaN 2.0
1 NaN NaN NaN
2 3.0 NaN NaN
3 5.0 NaN 7.0
'''
#当行全为NaN的时候,才删除,参数how默认是any,含有缺失值就删除
print(data.dropna(how="all"))
'''
0 1 2
0 1.0 NaN 2.0
2 3.0 NaN NaN
3 5.0 NaN 7.0
'''
#当列全为NaN的时候,才删除
print(data.dropna(how="all",axis=1))
'''
0 2
0 1.0 2.0
1 NaN NaN
2 3.0 NaN
3 5.0 7.0
'''
dropna方法的inplace的设置与Series一样。
3、指定删除数据后显示部分数据观察
a = [[1, np.nan, 2],[np.nan,None,np.nan],[3, None, None],[5,None,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1.0 NaN 2.0
1 NaN NaN NaN
2 3.0 NaN NaN
3 5.0 NaN 7.0
'''
#当行全为NaN的时候,才删除,参数how默认是any,含有缺失值就删除
print(data.dropna(how="all"))
'''
0 1 2
0 1.0 NaN 2.0
2 3.0 NaN NaN
3 5.0 NaN 7.0
'''
#通过thresh参数来控制显示删除数据的条数,删除列的时候thresh参数无效
print(data.dropna(how="all",thresh=2))
'''
0 1 2
0 1.0 NaN 2.0
3 5.0 NaN 7.0
'''
三、填充缺失值
数据都是宝贵的,也许有时候你的数据不够多,因为数据越多对于模型的训练,数据分析都是有好处的,所以很多的时候我们都不想删除数据。通常情况下,也许你会选择用一些特殊值来填充缺失值。下面介绍使用pandas的fillna方法来填充缺失数据。
1、指定特殊值填充缺失值
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1 2.0 2.0
1 3 NaN 6.0
2 3 7.0 NaN
3 5 NaN 7.0
'''
#用0填充所有的缺失数据
print(data.fillna(0))
'''
0 1 2
0 1 2.0 2.0
1 3 0.0 6.0
2 3 7.0 0.0
3 5 0.0 7.0
'''
2、不同列使用不同的填充值
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1 2.0 2.0
1 3 NaN 6.0
2 3 7.0 NaN
3 5 NaN 7.0
'''
print(data.fillna({1:1,2:2}))
'''
0 1 2
0 1 2.0 2.0
1 3 1.0 6.0
2 3 7.0 2.0
3 5 1.0 7.0
'''
3、前向填充和后向填充
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1 2.0 2.0
1 3 NaN 6.0
2 3 7.0 NaN
3 5 NaN 7.0
'''
#前向填充,使用默认是上一行的值,设置axis=1可以使用列进行填充
print(data.fillna(method="ffill"))
'''
0 1 2
0 1 2.0 2.0
1 3 2.0 6.0
2 3 7.0 6.0
3 5 7.0 7.0
'''
#后向填充,使用下一行的值,不存在的时候就不填充
print(data.fillna(method="bfill"))
'''
0 1 2
0 1 2.0 2.0
1 3 7.0 6.0
2 3 7.0 7.0
3 5 NaN 7.0
'''
4、使用列的平均值进行填充
a = [[1, 2, 2],[3,None,6],[3, 7, None],[5,None,7]]
data = DataFrame(a)
print(data)
'''
0 1 2
0 1 2.0 2.0
1 3 NaN 6.0
2 3 7.0 NaN
3 5 NaN 7.0
'''
print(data.fillna(data.mean()))
'''
0 1 2
0 1 2.0 2.0
1 3 4.5 6.0
2 3 7.0 5.0
3 5 4.5 7.0
'''
来源:https://blog.csdn.net/sinat_29957455/article/details/79017363


猜你喜欢
- 发现问题图片地址如下http://qximg.lightplan.cc/2016/09/11/1473574486942944.jpeg需要
- 今天在论坛上面看到有些兄弟不知道HTC是什么东西。小生在这里稍微说一下。从5.5版本开始,Internet Explorer(IE)开始支持
- 近日一直在折腾vps ,刚刚碰到在搬移wordpress过程中导入数据库的时候。碰到了 #1062 – Duplicate entry
- <table border="1" id="tab"> <tr>
- echo是PHP语句, print和print_r是函数,语句没有返回值,函数可以有返回值(即便没有用) print只
- 以前的Dreamweaver中是没有图片处理功能的,即使你要处理也只能使用CSS中的相关滤镜进行一些效
- 相关的OBJECTPROPERTY可参考:http://msdn.microsoft.com/en-us/library/ms176105.
- Ranorex测试报告如何发送到邮箱在网上看了下,其实可以通过在Ranorex上或者VS调用编写发送邮箱代码就可以执行发送了,RX主要涉及到
- 数据库的表Info,表部分结构:Info_Id  
- 今天,总结一下最近编程使用的python异常处理和日志处理的感受,其实异常处理是程序编写时非常重要的一块,但是我一开始学的语言是C++,这门
- 本文实例讲述了Python3访问并下载网页内容的方法。分享给大家供大家参考。具体如下:#!/usr/local/bin/python3.2i
- 这是官方对SubFolders的介绍:返回由指定文件夹中所有子文件夹(包括隐藏文件夹和系统文件夹)组成的 Folders 集合。object
- Boundary MatchersJava regex API还支持边界匹配。如果我们关心在输入文本中匹配的确切位置,那么这就是我们要寻找的
- 本文描述通过统计分析出医院信息系统需分区的表,对需分区的表选择分区键,即找出包括在你的分区键中的列(表的属性),对大型数据的管理比较有意义,
- 前言Go语言是Google内部主推的语言,它作为一门全新的静态类型开发语言,与当前的开发语言相比具有许多令人兴奋不已的新特性。专门针对多处理
- 高动态范围成像一、引言如今,大多数数字图像和成像设备每通道使用 8 位整数表示灰度,因此将设备的动态范围限制在两个数量级(实际上是 256
- 本文实例讲述了python面试题之列表声明。分享给大家供大家参考,具体如下:下面程序输出的结果为?val = [['a']*
- 1.作者介绍钱文浩,男,西安工程大学电子信息学院,2021级研究生研究方向:机器视觉与人工智能电子邮件:2414712362@qq.com刘
- 一、下载安装包http://www.php.net/downloads.php获取下载地址wgethttp://hk1.php.net/di
- PHP有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 203