以泰坦尼克数据集为例,探讨空值检测手段isna()和isnull()
发布于 作者:苏南大叔 来源:程序如此灵动~话题回到泰坦尼克数据集,本文以该数据集为例,探讨对数据进行清洗处理中空值检测的几种方式。因为在数据清洗的领域里面,空值是一定影响数据预测的结果的,一定要提前预防。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的代码经验文章。测试环境:python@3.12.3
,pandas@2.2.2
,numpy@1.26.4
,xlrd@2.0.1
,openpyxl@3.1.2
。
空值检测数据集准备
数据集不同版本的选择,和后面的代码的编写是很紧密相关的。下面的链接可以对泰坦尼克数据集做较详细的描述。
- https://newsn.net/say/titanic.html
- https://newsn.net/say/sklearn-fetch_openml.html
- https://newsn.net/say/pandas-excel.html
对于na
空值,实际上是本文讨论的重点内容。什么样的数据可以被认为是na
,pandas
是有着自己的标准的。但是,这个标准可以被自定义。比如一些不合理的数据,也可以在读取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() 结果对比
实际上这满屏幕的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
内容,请参考:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。