人生苦短,快学Python!在我们日常接触到的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()
输出:
在交互式环境中输入如下命令:
df.isnull().any(axis=1)
输出:
在交互式环境中输入如下命令:
df.isnull().sum()
输出:
注:isna()和isnull()的用法是相同的,这里不再演示。
缺失值 NaN ②
由于在Pandas中isnull()
方法返回True表示此处为缺失值,所以我们可以对数据集进行切片也可实现找到缺失值。
在交互式环境中输入如下命令:
df[df.isnull().values==True]
输出:
注意:如果某行有多个值是空值,则会重复次数出现,所以我们可以利用
df[df.isnull().values==True].drop_duplicates()
来去重。
另外,notnull()
方法是与isnull()
相对应的,使用它可以直接查询非缺失值的数据行。
df[df["A列"].notnull()]
输出:
空值
空值在Pandas中指的是空字符串"",我们同样可以对数据集进行切片找到空值。
在交互式环境中输入如下命令:
df[df["B列"] == ""]
输出:
此外,也可以利用空值与正常值的区别来区分两者,比如isnumeric()
方法检测字符串是否只由数字组成。
在交互式环境中输入如下命令:
df[df["B列"].str.isnumeric() == False ]
输出:
如上所示,同样查询到了数据集中的空值。
字符“-”、“?”等
很多时候,我们要处理的是本地的历史数据文件,在这些Excel中往往并不规范,比如它们有可能会使用“*”、“?”、“—”、“!”等等字符来表示缺失值。
对于这类文本,我们可以使用正则表达式来匹配缺失值。
import re
df[df["C列"].apply(lambda x: len(re.findall('NA|[*|?|!|#|-]', x)) != 0)]
输出:
如上所示,我自定义了匿名函数lambda,作用是在文本列的每一行中查找以下文本值:“NA”、“*”、“?” 、“!” 、“#”、“-”,并检查它找到的列表的长度。如果列表不为零,则表示找到了代表缺失值的字符,因此该行中至少有一个缺失值。
df[df["D列"].apply(lambda x: len(re.findall('NA|[*|?|!|#|-]', x)) != 0)]
输出:
我们可以对不同列都进行同样的缺失值查询,另外也可以根据自己的实际情况,替换正则表达式中代表缺失值的字符。
推荐文章
技术交流
完整代码、数据获取,可以找我来要
技术交流、求职内推、干货汇总、与 3000+来自阿里、北大、清华、中科院、CMU、腾讯、百度等名校名企开发者互动交流~
目前开通了技术交流群,群友已超过3000人,添加时最好的备注方式为:来源+兴趣方向,方便找到志同道合的朋友
- 方式①、发送如下图片至微信,长按识别,后台回复:加群;
- 方式②、添加微信号:dkl88191,备注:来自CSDN
- 方式③、微信搜索公众号:Python学习与数据挖掘,后台回复:加群