我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

话题回到泰坦尼克数据集,本文以该数据集为例,探讨对数据进行清洗处理中空值检测的几种方式。因为在数据清洗的领域里面,空值是一定影响数据预测的结果的。一定要提前预防。

苏南大叔:以泰坦尼克数据集为例,探讨空值检测手段isna()和isnull() - 空值检测
以泰坦尼克数据集为例,探讨空值检测手段isna()和isnull()(图2-1)

苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。测试环境:python@3.12.3pandas@2.2.2numpy@1.26.4xlrd@2.0.1openpyxl@3.1.2

空值检测数据集准备

数据集不同版本的选择,和后面的代码的编写是很紧密相关的。下面的链接可以对泰坦尼克数据集做较详细的描述。

对于na空值,实际上是本文讨论的重点内容。什么样的数据可以被认为是napandas是有着自己的标准的。但是,这个标准可以被自定义。比如一些不合理的数据,也可以在读取excel文件的时候,通过定义na_values参数,就被自动转化为NA值。

import pandas as pd
file = "http://hbiostat.org/data/repo/titanic3.xls"
df = pd.read_excel(file, "titanic3", index_col=None, na_values=['NA'])
值得注意的是:read_excel()的时候,是可以通过定义na_values谁是NA,来刻意改变空值的范围的。

isna() 和 isnull()

据目前的资料显示,.isna().isnull()的返回值完全一样。两者完全一致,其同时存在的理由,仅仅是使用习惯的历史问题。isnull()函数是pandas最初就具备的函数,而isna()是后来为了与R语言中的命名习惯保持一致而引入的。

其返回值是个集合,并非单纯的True或者False。可以用于比较整个DataFrame,或者某个Series

Series 空值检测

使用范例:

a = df["name"].isnull()
b = df["name"].isna()
print(type(a), type(b))
print(a)
print(b)

输出:

<class 'pandas.core.series.Series'> <class 'pandas.core.series.Series'>
0       False
1       False
2       False
3       False
4       False
        ...
1304    False
1305    False
1306    False
1307    False
1308    False
Name: name, Length: 1309, dtype: bool
0       False
1       False
2       False
3       False
4       False
        ...
1304    False
1305    False
1306    False
1307    False
1308    False
Name: name, Length: 1309, dtype: bool

DataFrame空值检测

使用范例:

c = df.isnull()
d = df.isna()
print(type(c), type(d))
print(c)
print(d)

输出:

苏南大叔:以泰坦尼克数据集为例,探讨空值检测手段isna()和isnull() - df检测na结果
以泰坦尼克数据集为例,探讨空值检测手段isna()和isnull()(图2-2)

isna() / isnull() 结果对比

实际上这满屏幕的True或者False,没有什么实际的意义。False表示非空,True表示为空值。两者是否真的完全一致。还的进行进一步检测。下面的两个方案,实际上根据DataFrame还是Series,效果不一样。

方案一

print((a == b).all())
print((c == d).all())

输出:

True

pclass       True
survived     True
name         True
sex          True
age          True
sibsp        True
parch        True
ticket       True
fare         True
cabin        True
embarked     True
boat         True
body         True
home.dest    True
dtype: bool

这个输出结果可以看到:对于Series来说,这个方法可用。但是,对于DataFrame来说,并不好用。因为它的返回值并不是我们期待的单独的一个结果。

方案二【推荐】

import numpy as np
print(np.all(a == b))
print(np.all(c == d))

输出:

True
True

显而易见,这个方案才是我们所需要的。相关文章:

总结

本文内容说了很多,其实仅仅阐述了一个事情。就是可以使用isna()或者isnull()来检测数据集里面,每条数据的每条字段是否为空。更多苏南大叔的python内容,请参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python