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: 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
。
波折线取反操作
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
是可选参数,表示当【条件不满足时】替换的值。
空字符串转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
相关文章
- https://newsn.net/say/python-isnone.html
- https://newsn.net/say/python-isnan.html
- https://newsn.net/say/python-isspace.html
结语
把空值和其他不合理的值,都挑出来。然后进行适当处理,这就是本文的主要内容。更多苏南大叔的python
经验文章,请参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。