在实际应用中对于数据进行分析的时候,经常能看见缺失值,下面来介绍一下如何利用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 '''
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]