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

最近的几篇文章都是关于python的数据处理过程中,对空值进行检测的问题的。本文主要涉及的是dataframe的空值区分问题,主要使用的是df.isnull()df.notnull()。当然,还有其它的辅助操作。

苏南大叔:python数据清洗,如何对dataframe数据进行isnull空值区分? - dataframe空值区分
python数据清洗,如何对dataframe数据进行isnull空值区分?(图3-1)

大家好,这里是苏南大叔的“奥林匹克技术竞赛”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8pandas@1.1.5numpy@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: bool
n1 = 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

苏南大叔:python数据清洗,如何对dataframe数据进行isnull空值区分? - isnull判断
python数据清洗,如何对dataframe数据进行isnull空值区分?(图3-2)

波折线取反操作

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    叔  shu

df代表DataFrame对象,condition是一个条件表达式,other是可选参数,表示当【条件不满足时】替换的值。

苏南大叔:python数据清洗,如何对dataframe数据进行isnull空值区分? - nan替换
python数据清洗,如何对dataframe数据进行isnull空值区分?(图3-3)

空字符串转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  shu
f = df["a3"].isnull()
r3 = df[f]
print(r3)

输出:

     a1  a2   a3
0     苏      NaN
2  None      NaN

相关文章

结语

把空值和其他不合理的值,都挑出来。然后进行适当处理,这就是本文的主要内容。更多苏南大叔的python经验文章,请参考:

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

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

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

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