干货(肝火)!Python中查询缺失值的4种方法

0946ec41279f51d3d27dc60014c4cf90.png

在我们日常接触到的Python中,狭义的缺失值一般指DataFrame中的NaN。广义的话,可以分为三种。

  • 缺失值:在Pandas中的缺失值有三种:np.nan (Not a Number) 、 None 和 pd.NaT(时间格式的空值,注意大小写不能错)

  • 空值:空值在Pandas中指的是空字符串"";

  • 最后一类是导入的Excel等文件中,原本用于表示缺失值的字符“-”、“?”等。

今天聊聊Python中查询缺失值的4种方法。

缺失值 NaN ①

在Pandas中查询缺失值,最常用的⽅法就是isnull(),返回True表示此处为缺失值。

我们可以将其与any()⽅法搭配使用来查询存在缺失值的行,也可以与sum()⽅法搭配使用来查询存在缺失值的列。

  • isnull():对于缺失值,返回True;对于⾮缺失值,返回False。

  • any():⼀个序列中有⼀个True,则返回True,否则返回False。

  • sum():对序列进行求和计算。

在交互式环境中输入如下命令:

df.isnull()

输出:

a06df255e9c8f4759da54d99e49618c6.png

在交互式环境中输入如下命令:

df.isnull().any(axis=1)

输出:

41e5ad61aea9f71f49263f7876e0de84.png

在交互式环境中输入如下命令:

df.isnull().sum()

输出:

b87243ef0f0c710199cde5c7fbee695e.png

注:isna()和isnull()的用法是相同的,这里不再演示。

缺失值 NaN ②

由于在Pandas中isnull()方法返回True表示此处为缺失值,所以我们可以对数据集进行切片也可实现找到缺失值。

在交互式环境中输入如下命令:

df[df.isnull().values==True]

输出:

a9b983262c05d1f0697a749ee59f4aaa.png

注意:如果某行有多个值是空值,则会重复次数出现,所以我们可以利用df[df.isnull().values==True].drop_duplicates()来去重。

另外,notnull()方法是与isnull()相对应的,使用它可以直接查询非缺失值的数据行。

df[df["A列"].notnull()]

输出:

08a688c8c50d0cfa5b3d4ccaafdee759.png

空值

空值在Pandas中指的是空字符串"",我们同样可以对数据集进行切片找到空值。

在交互式环境中输入如下命令:

df[df["B列"] == ""]

输出:

7448d39fa0cf193eccf5a28db4929fde.png

此外,也可以利用空值与正常值的区别来区分两者,比如isnumeric()方法检测字符串是否只由数字组成。

在交互式环境中输入如下命令:

df[df["B列"].str.isnumeric() == False ]

输出:

923d0517e9e8177d3b28422de054b10c.png

如上所示,同样查询到了数据集中的空值。

字符“-”、“?”等

很多时候,我们要处理的是本地的历史数据文件,在这些Excel中往往并不规范,比如它们有可能会使用“*”、“?”、“—”、“!”等等字符来表示缺失值。

对于这类文本,我们可以使用正则表达式来匹配缺失值。

import re

df[df["C列"].apply(lambda x: len(re.findall('NA|[*|?|!|#|-]', x)) != 0)]

输出:

f4aef3ca785343c8f60b632eb59020af.png

如上所示,我自定义了匿名函数lambda,作用是在文本列的每一行中查找以下文本值:“NA”、“*”、“?” 、“!” 、“#”、“-”,并检查它找到的列表的长度。如果列表不为零,则表示找到了代表缺失值的字符,因此该行中至少有一个缺失值。

df[df["D列"].apply(lambda x: len(re.findall('NA|[*|?|!|#|-]', x)) != 0)]

输出:

bed1e528ab14e5951727a126d424d24f.png

我们可以对不同列都进行同样的缺失值查询,另外也可以根据自己的实际情况,替换正则表达式中代表缺失值的字符。


人生苦短,快学Python!

今天我们分享了Python中查询缺失值的4种方法,觉得不错的同学给右下角点个在看吧

END

推荐阅读



牛逼!Python常用数据类型的基本操作(长文系列第①篇)
牛逼!Python的判断、循环和各种表达式(长文系列第②篇)

牛逼!Python函数和文件操作(长文系列第③篇)

牛逼!Python错误、异常和模块(长文系列第④篇)

吴恩达deeplearining.ai的经典总结资料
Ps:从小程序直接获取下载
  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值