目录
使用isnull()/notnull+any()/all()进行过滤
Pandas默认空值处理方式
pandas中默认会将None值转为np.nan进行处理,np.nan为float类型数据
以下为本篇博客使用的带有空值的DataFrame,可以看到输出的DataFrame中的NaN就是np.nan
import pandas as pd
import numpy as np
np.random.seed(42)
l1 = np.random.randint(10,30,(6,6))
data = pd.DataFrame(data = l1)
data.iloc[1,2] = None
data.iloc[3,5] = None
data.iloc[4,4] = None
data.iloc[4,3] = np.nan
print(data)
# 0 1 2 3 4 5
# 0 16 29 24.0 20.0 17.0 16.0
# 1 28 20 NaN 13.0 17.0 12.0
# 2 11 21 15.0 11.0 10.0 21.0
# 3 21 26 19.0 25.0 24.0 NaN
# 4 28 21 29.0 NaN NaN 28.0
# 5 16 18 16.0 27.0 13.0 23.0
空值识别函数
isnull()/notnull()
isnull()的作用是将DataFrame中为空值的地方变为True,其余地方为False,notnull()则相反,不为空值的地方为True,其余为False
import pandas as pd
import numpy as np
np.random.seed(42)
l1 = np.random.randint(10,30,(6,6))
data = pd.DataFrame(data = l1)
data.iloc[1,2] = None
data.iloc[3,5] = None
data.iloc[4,4] = None
data.iloc[4,3] = np.nan
print(data)
print(data.isnull())
print(data.notnull())
# 0 1 2 3 4 5
# 0 16 29 24.0 20.0 17.0 16.0
# 1 28 20 NaN 13.0 17.0 12.0
# 2 11 21 15.0 11.0 10.0 21.0
# 3 21 26 19.0 25.0 24.0 NaN
# 4 28 21 29.0 NaN NaN 28.0
# 5 16 18 16.0 27.0 13.0 23.0
# 0 1 2 3 4 5
# 0 False False False False False False
# 1 False False True False False False
# 2 False False False False False False
# 3 False False False False False True
# 4 False False False True True False
# 5 False False False False False False
# 0 1 2 3 4 5
# 0 True True True True True True
# 1 True True False True True True
# 2 True True True True True True
# 3 True True True True True False
# 4 True True True False False True
# 5 True True True True True True
用于查看不同行或列的空值个数
若需要显示不同行或列的空值个数,由于布尔类型数据在参与运算的时候True会默认转为1,False会默认转为0,所以只需要isnull()再加上sum()聚合函数即可,通过设置其axis参数来进行每行或每列的求和,值就为空值个数
import pandas as pd
import numpy as np
np.random.seed(42)
l1 = np.random.randint(10,30,(6,6))
data = pd.DataFrame(data = l1,index=list('ABCDEF'),columns=list('abcdef'))
data.iloc[1,2] = None
data.iloc[3,5] = None
data.iloc[4,4] = None
data.iloc[4,3] = np.nan
print(data)
print(data.isnull().sum(axis=0))
print(data.isnull().sum(axis=1))
# a b c d e f
# A 16 29 24.0 20.0 17.0 16.0
# B 28 20 NaN 13.0 17.0 12.0
# C 11 21 15.0 11.0 10.0 21.0
# D 21 26 19.0 25.0 24.0 NaN
# E 28 21 29.0 NaN NaN 28.0
# F 16 18 16.0 27.0 13.0 23.0
# a 0
# b 0
# c 1
# d 1
# e 1
# f 1
# dtype: int64
# A 0
# B 1
# C 0
# D 1
# E 2
# F 0
# dtype: int64
可以看到这里值为0的时候是沿行方向进行每一列的求和运算,为1的时候是沿列方向进行每一行的求和运算,得到的就为空值个数
用于查看不同行或列的空值占比
若要查看空值占比同样也只需要加上mean()聚合函数即可,mean()为和再除上个数,在布尔类型数据进行如此运算后,结果就为空值占比,同样也可以指定axis来选择行或列进行计算
import pandas as pd
import numpy as np
np.random.seed(42)
l1 = np.random.randint(10,30,(6,6))
data = pd.DataFrame(data = l1,index=list('ABCDEF'),columns=list('abcdef'))
data.iloc[1,2] = None
data.iloc[3,5] = None
data.iloc[4,4] = None
data.iloc[4,3] = np.nan
print(data)
print(data.isnull().mean(axis=0))
print(data.isnull().mean(axis=1))
# a b c d e f
# A 16 29 24.0 20.0 17.0 16.0
# B 28 20 NaN 13.0 17.0 12.0
# C 11 21 15.0 11.0 10.0 21.0
# D 21 26 19.0 25.0 24.0 NaN
# E 28 21