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数据相关推荐

  1. python填充nan_Pandas的数据清洗-填充NaN数据

    21. Pandas的数据清洗-填充NaN 上一章介绍了如何查询数据里的NaN数据,以及删除NaN的问题,有的时候不是说仅仅删除了NaN就对,实际出现NaN数据的原因很多,对于NaN数据所在的行或者列 ...

  2. python操作sqlserver如何判断删除的数据不存在_Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法...

    本文实例讲述了Python MongoDB 插入数据时已存在则不执行,不存在则插入的解决方法.分享给大家供大家参考,具体如下: 前言: 想把QQ日志爬虫(Python)爬下来的日志保存到 MongoD ...

  3. Python过滤掉numpy.array中非nan数据

    代码 需要先导入pandas arr的数据类型为一维的np.array import pandas as pd arr[~pd.isnull(arr)]

  4. python数据清洗去空值_Python 数据清洗--处理Nan

    import numpy as np import pandas as pd from pandas import Series,DataFrame from numpy import nan as ...

  5. python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行。

    python pandas DataFrame 替换 NaN 值 和 删除 NaN 所在的行. import pandas as pd import numpy as np df1 = pd.Data ...

  6. Python Flask实现修改和删除数据

    Python Flask实现修改和删除数据 上一篇文章写了查询和添加数据,这篇文章继续写修改和删除数据. 查询和添加数据参考: https://blog.csdn.net/weixin_4379027 ...

  7. python链接数据库并创建/删除/插入多个数据库/表/表数据

    import pymysql l链接数据库并执行sql语句 conn = pymysql.connect(host='10.245.251.61',user='stashlog',password=' ...

  8. Pandas数据处理1、DataFrame删除NaN空值(dropna各种属性值控制超全)

    Pandas数据处理--渐进式学习 目录 Pandas数据处理--渐进式学习 前言 环境 DataFrame删除NaN空值 dropna函数参数 测试数据 删除所有有空的行 axis属性值 how属性 ...

  9. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  10. 数据清洗---占据了数据分析师80%的时间

    以点一份披萨为例,讲清数据分析全流程. 01播种 农场的西红柿提供了披萨的配料,在农场播种西红柿种子.这就相当于数据生成过程,比如用户操作,触发传感器,前端埋点等. 02收获 采摘成熟的西红柿.这就相 ...

最新文章

  1. 这款开源测试神器,圆了我玩游戏不用动手的梦想
  2. WebApi_基于Token的身份验证——JWT
  3. 博客园文章方块背景格式
  4. rabbitmq接口异常函数方法_分布式系统消息中间件——RabbitMQ的使用进阶篇
  5. Laravel深入学习3 - 接口约定
  6. label之间展示间距_工法样板如何做?碧桂园质量工法样板展示区做法标准
  7. 射频微电子学_射频人的双十二,应该这样过……
  8. matlab分析傅里叶级数
  9. 软考网络工程师-华为设备命令学习笔记
  10. 外卖系统源码,如何搭建一套同城o2o外卖商城平台
  11. 制作一个简单HTML静态网页(HTML+CSS)
  12. CUDA By Examples 0 - 准备工作
  13. 在ps中用3d来做阴影
  14. [AI-Steering编程]九.路径跟随
  15. 各层电子数排布规则_电子层排布,电子的排布规律
  16. opencv-视频处理--画感兴趣区域(ROI)
  17. ts获取服务器数据_ts 流服务器
  18. 你所不了解的微服务架构
  19. 基于Go语言Echo+Vue+ElementUI的OA办公系统
  20. Ubuntu20.04安装NVIDIA显卡驱动、CUDA、CUDNN及突破NVENC并发限制

热门文章

  1. 中国最美的100首情诗
  2. 操作系统课程设计1_Linux系统
  3. dz中footer.php在哪找,dz模版制作教程
  4. 最新SOCKS5代理服务器 socks5代理ip地址
  5. travis ci java_[转]Travis Ci的最接底气的中文使用教程
  6. android 4.4 zygote 开机速度,一种安卓系统快速开机的方法及装置的制造方法
  7. 华为“最青睐”的10所大学,有你的大学么?
  8. Python调用华为API实现人脸检测
  9. linux查看主机配置命令,如何查看Linux 硬件配置信息
  10. [PC]极品飞车2 特别版