Pandas空值识别,空值填充,空值过滤方法超详细解读

目录

Pandas默认空值处理方式

空值识别函数

isnull()/notnull()

用于查看不同行或列的空值个数

用于查看不同行或列的空值占比

空值填充函数

fillna()

使用0来填充空值

使用每列均值来填充空值

使用每列前面一个值来填充空值

使用每列后面一个值来填充空值

使用每行前一个值来填充空值

使用每行后一个值来填充空值

interpolate()

空值过滤函数

使用isnull()/notnull+any()/all()进行过滤

筛选出不含空值的行

筛选出有空值的行

dropna()


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 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值