python数据清洗,如何对dataframe数据进行isnull空值区分?
发布于 作者:苏南大叔 来源:程序如此灵动~
最近的几篇文章都是关于python的数据处理过程中,对空值进行检测的问题的。本文主要涉及的是dataframe的空值区分问题,主要使用的是df.isnull()和df.notnull()。当然,还有其它的辅助操作。

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8,pandas@1.1.5,numpy@1.24.4。
测试数据
import numpy as np
import pandas as pd
from numpy import nan as NaN
df = pd.DataFrame({
'a1' : ["苏", NaN, None, "叔"],
'a2': ["", "nan", " ", "shu"],
})
print(df)输出:
a1 a2
0 苏
1 NaN nan
2 None
3 叔 shu.isnull()和.notnull()
t1 = df.isnull()
t2 = df["a2"].isnull()
print(t1)
print(t2)输出:
a1 a2
0 False False
1 True False
2 True False
3 False False
0 False
1 False
2 False
3 False
Name: a2, dtype: booln1 = df.notnull()
n2 = df["a2"].notnull()
print(n1)
print(n2)输出:
a1 a2
0 True True
1 False True
2 False True
3 True True
0 True
1 True
2 True
3 True
Name: a2, dtype: bool这里的结果表明:第二列数据a2,无论空字符串,空格,字符的nan,都不会被视为null。

波折线取反操作
f = df["a1"].isnull()
r1 = df[f]
r2 = df[~f]
print(r1)
print(r2)输出:
a1 a2
1 NaN nan
2 None
a1 a2
0 苏
3 叔 shu这里的波折线,就起到了一个取反的作用。
where替换【很有用】
和上面的需求一样,只是用where做原地替换。
print(df.where(~df["a2"].apply(lambda x: str(x).strip() == ""),NaN))输出:
a1 a2
0 NaN NaN
1 NaN nan
2 NaN NaN
3 叔 shudf代表DataFrame对象,condition是一个条件表达式,other是可选参数,表示当【条件不满足时】替换的值。

空字符串转NaN
关于第二列数据a2:["", "nan", " ", "shu"],按照标准的.isnull()来说,他们都不是空值。但是,对于实际操作来说,空字符串和空格,也是可以认为是空值的。那么,根据这个新的空字符串(空格)的标准,再次进行区分。
df["a3"] = df["a2"].apply(lambda x: np.NaN if (str(x).strip() == "") else x)
print(df)输出:
a1 a2 a3
0 苏 NaN
1 NaN nan nan
2 None NaN
3 叔 shu shuf = df["a3"].isnull()
r3 = df[f]
print(r3)输出:
a1 a2 a3
0 苏 NaN
2 None NaN相关文章
- https://newsn.net/say/python-isnone.html
- https://newsn.net/say/python-isnan.html
- https://newsn.net/say/python-isspace.html
结语
把空值和其他不合理的值,都挑出来。然后进行适当处理,这就是本文的主要内容。更多苏南大叔的python经验文章,请参考: