python 剔除nan_Pandas的数据清洗-删除NaN数据
20. Pandas的数据清洗-删除NaN
数据清洗(Tidy Data),是对数据进行重新审查和校验的过程,目的在于删除重复信息、纠正存在的错误,并提供数据一致性。
Pandas提供了很多的工具和函数可以对缺失、重复的数据进行相应的数据的处理。
20.1 构造缺失数据
在Pandas的各类数据Series和DataFrame里字段值为NaN的为缺失数据,不代表0而是说没有赋值数据。数据的缺失有很多原因,缺失不是错误、无效,需要对缺失的数据进行必要的技术处理,以便后续的计算、统计。
构造缺失数据的DataFrame
import pandas as pd
import numpy as np
val = np.arange(10, 38).reshape(7, 4)
col = list("abcd")
idx = "cake make fake sake wake lake take".split()
df = pd.DataFrame(val, columns = col, index = idx)
print df
df["e"] = np.nan
df.at["make", "e"] = 100
df.at["wake", "e"] = 300
df.loc["jake"] = np.nan
df.at["jake", "c"] = 200
df["f"] = np.nan
print df
执行结果:
a b c d
cake 10 11 12 13
make 14 15 16 17
fake 18 19 20 21
sake 22 23 24 25
wake 26 27 28 29
lake 30 31 32 33
take 34 35 36 37
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 300 NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
jake NaN NaN 200 NaN NaN NaN
20.2 查看缺失数据
查看缺失数据的情况可以用pandas的isnull函数看看有那些字段上的数据缺失,可以用sum进行统计。也可使用notnull和count函数统计非NaN数据量。
import pandas as pd
import numpy as np
val = np.arange(10, 38).reshape(7, 4)
col = list("abcd")
idx = "cake make fake sake wake lake take".split()
df = pd.DataFrame(val, columns = col, index = idx)
print df
df["e"] = np.nan
df.at["make", "e"] = 100
df.at["wake", "e"] = 300
df.loc["jake"] = np.nan
df.at["jake", "c"] = 200
df["f"] = np.nan
print df
print "which has Nan?\n", df.isnull(),"\n"
print "each column has NaN\n", df.isnull().sum(),"\n"
print "total has NaN\n", df.isnull().sum().sum(),"\n"
print "each column values\n", df.count(),"\n"
print "which column values\n", df.notnull(),"\n"
执行结果如下:
a b c d
cake 10 11 12 13
...
take 34 35 36 37
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 300 NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
jake NaN NaN 200 NaN NaN NaN
which has Nan?
a b c d e f
cake False False False False True True
make False False False False False True
fake False False False False True True
sake False False False False True True
wake False False False False False True
lake False False False False True True
take False False False False True True
jake True True False True True True
each column has NaN
a 1
b 1
c 0
d 1
e 6
f 8
dtype: int64
total has NaN
17
each column values
a 7
b 7
c 8
d 7
e 2
f 0
dtype: int64
which column values
a b c d e f
cake True True True True False False
make True True True True True False
fake True True True True False False
sake True True True True False False
wake True True True True True False
lake True True True True False False
take True True True True False False
jake False False True False False False
20.3 布尔选择删除
删除NaN(主要针对列Series),在pandas里可以使用布尔选择或者dropna函数删除DataFrame的某Series列里的数据,但不会影响DataFrame本身。
import pandas as pd
import numpy as np
val = np.arange(10, 38).reshape(7, 4)
col = list("abcd")
idx = "cake make fake sake wake lake take".split()
df = pd.DataFrame(val, columns = col, index = idx)
df["e"] = np.nan
df.at["make", "e"] = 100
df.at["wake", "e"] = 300
df.loc["jake"] = np.nan
df.at["jake", "c"] = 200
df["f"] = np.nan
print df
print df.e[df.e.notnull()]
print df.e.dropna()
print df
执行结果:
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 300 NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
jake NaN NaN 200 NaN NaN NaN # print df
make 100
wake 300
Name: e, dtype: float64 # print df.e[df.e.notnull()]
make 100
wake 300
Name: e, dtype: float64 # print df.e.dropna()
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 300 NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
jake NaN NaN 200 NaN NaN NaN # print df
20.4 使用dropna函数删除
如果对DataFrame使用了dropna那么行上有NaN的会被删除这行得到结果不直接会影响DataFrame本身。
import pandas as pd
import numpy as np
val = np.arange(10, 38).reshape(7, 4)
col = list("abcd")
idx = "cake make fake sake wake lake take".split()
df = pd.DataFrame(val, columns = col, index = idx)
print df
df["e"] = np.nan
df.at["make", "e"] = 100
print df
print df.dropna()
print df
执行结果:
a b c d
cake 10 11 12 13
make 14 15 16 17
fake 18 19 20 21
sake 22 23 24 25
wake 26 27 28 29
lake 30 31 32 33
take 34 35 36 37# print df
a b c d e
cake 10 11 12 13 NaN
make 14 15 16 17 100
fake 18 19 20 21 NaN
sake 22 23 24 25 NaN
wake 26 27 28 29 NaN
lake 30 31 32 33 NaN
take 34 35 36 37 NaN # print df
a b c d e
make 14 15 16 17 100 # print df.dropna()
a b c d e
cake 10 11 12 13 NaN
make 14 15 16 17 100
fake 18 19 20 21 NaN
sake 22 23 24 25 NaN
wake 26 27 28 29 NaN
lake 30 31 32 33 NaN
take 34 35 36 37 NaN # print df
20.5 行删除NaN
如果仅想删除行里全都是NaN的行,可以在dropna函数里使用how= 'all'参数。
import pandas as pd
import numpy as np
val = np.arange(10, 38).reshape(7, 4)
col = list("abcd")
idx = "cake make fake sake wake lake take".split()
df = pd.DataFrame(val, columns = col, index = idx)
df["e"] = np.nan
df.at["make", "e"] = 100
df["f"] = np.nan
df.loc["gake"] = np.nan
print df
print "del cols is all NaN\n", df.dropna(axis = 'columns', how='all')
print df
print "del rows is all NaN\n", df.dropna(axis = 'rows', how='all')
print df
执行结果:
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 NaN NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
gake NaN NaN NaN NaN NaN NaN
del cols is all NaN
a b c d e
cake 10 11 12 13 NaN
make 14 15 16 17 100
fake 18 19 20 21 NaN
sake 22 23 24 25 NaN
wake 26 27 28 29 NaN
lake 30 31 32 33 NaN
take 34 35 36 37 NaN
gake NaN NaN NaN NaN NaN
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 NaN NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
gake NaN NaN NaN NaN NaN NaN
del rows is all NaN
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 NaN NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 NaN NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
gake NaN NaN NaN NaN NaN NaN
20.6 设定阈值删除
如果想保留含有若干非空值的行或者列可以使用thresh参数。
import pandas as pd
import numpy as np
val = np.arange(10, 38).reshape(7, 4)
col = list("abcd")
idx = "cake make fake sake wake lake take".split()
df = pd.DataFrame(val, columns = col, index = idx)
df["e"] = np.nan
df.at["make", "e"] = 100
df["f"] = np.nan
df.loc["gake"] = np.nan
print df
print df.dropna(axis = 1, thresh = 2)
程序里axis = 1, thresh = 2是说列上至少有两个非NaN的列留下。
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 NaN NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
gake NaN NaN NaN NaN NaN NaN
a b c d
cake 10 11 12 13
make 14 15 16 17
fake 18 19 20 21
sake 22 23 24 25
wake 26 27 28 29
lake 30 31 32 33
take 34 35 36 37
gake NaN NaN NaN NaN
a b c d e f
cake 10 11 12 13 NaN NaN
make 14 15 16 17 100 NaN
fake 18 19 20 21 NaN NaN
sake 22 23 24 25 NaN NaN
wake 26 27 28 29 NaN NaN
lake 30 31 32 33 NaN NaN
take 34 35 36 37 NaN NaN
gake NaN NaN NaN NaN NaN NaN
20.7 影响DataFrame参数
如果想dropna函数想直接影响dataframe本身可以使用参数inplace=True。
python 剔除nan_Pandas的数据清洗-删除NaN数据相关推荐
- python填充nan_Pandas的数据清洗-填充NaN数据
21. Pandas的数据清洗-填充NaN 上一章介绍了如何查询数据里的NaN数据,以及删除NaN的问题,有的时候不是说仅仅删除了NaN就对,实际出现NaN数据的原因很多,对于NaN数据所在的行或者列 ...
- python操作sqlserver如何判断删除的数据不存在_Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法...
本文实例讲述了Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法.分享给大家供大家参考,具体如下: 前言: 想把QQ日志爬虫(Python)爬下来的日志保存到 MongoD ...
- Python过滤掉numpy.array中非nan数据
代码 需要先导入pandas arr的数据类型为一维的np.array import pandas as pd arr[~pd.isnull(arr)]
- python数据清洗去空值_Python 数据清洗--处理Nan
import numpy as np import pandas as pd from pandas import Series,DataFrame from numpy import nan as ...
- python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行。
python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行. import pandas as pd import numpy as np df1 = pd.Data ...
- Python Flask实现修改和删除数据
Python Flask实现修改和删除数据 上一篇文章写了查询和添加数据,这篇文章继续写修改和删除数据. 查询和添加数据参考: https://blog.csdn.net/weixin_4379027 ...
- python链接数据库并创建/删除/插入多个数据库/表/表数据
import pymysql l链接数据库并执行sql语句 conn = pymysql.connect(host='10.245.251.61',user='stashlog',password=' ...
- Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)
Pandas数据处理--渐进式学习 目录 Pandas数据处理--渐进式学习 前言 环境 DataFrame删除NaN空值 dropna函数参数 测试数据 删除所有有空的行 axis属性值 how属性 ...
- python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...
- 数据清洗---占据了数据分析师80%的时间
以点一份披萨为例,讲清数据分析全流程. 01播种 农场的西红柿提供了披萨的配料,在农场播种西红柿种子.这就相当于数据生成过程,比如用户操作,触发传感器,前端埋点等. 02收获 采摘成熟的西红柿.这就相 ...
最新文章
- 这款开源测试神器,圆了我玩游戏不用动手的梦想
- WebApi_基于Token的身份验证——JWT
- 博客园文章方块背景格式
- rabbitmq接口异常函数方法_分布式系统消息中间件——RabbitMQ的使用进阶篇
- Laravel深入学习3 - 接口约定
- label之间展示间距_工法样板如何做?碧桂园质量工法样板展示区做法标准
- 射频微电子学_射频人的双十二,应该这样过……
- matlab分析傅里叶级数
- 软考网络工程师-华为设备命令学习笔记
- 外卖系统源码,如何搭建一套同城o2o外卖商城平台
- 制作一个简单HTML静态网页(HTML+CSS)
- CUDA By Examples 0 - 准备工作
- 在ps中用3d来做阴影
- [AI-Steering编程]九.路径跟随
- 各层电子数排布规则_电子层排布,电子的排布规律
- opencv-视频处理--画感兴趣区域(ROI)
- ts获取服务器数据_ts 流服务器
- 你所不了解的微服务架构
- 基于Go语言Echo+Vue+ElementUI的OA办公系统
- Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制
热门文章
- 中国最美的100首情诗
- 操作系统课程设计1_Linux系统
- dz中footer.php在哪找,dz模版制作教程
- 最新SOCKS5代理服务器 socks5代理ip地址
- travis ci java_[转]Travis Ci的最接底气的中文使用教程
- android 4.4 zygote 开机速度,一种安卓系统快速开机的方法及装置的制造方法
- 华为“最青睐”的10所大学,有你的大学么?
- Python调用华为API实现人脸检测
- linux查看主机配置命令,如何查看Linux 硬件配置信息
- [PC]极品飞车2 特别版