Pandas(第十一集:DataFrame缺失值处理)


1. 源数据

dic = {
    "course": ['Java', 'Python', 'PHP', 'C'],
    "score": [11, 22, np.nan, 44]
}
df = pd.DataFrame(dic)

2.pd.isnull()【检测是否存在缺失值】

# True:NaN  False:~NaN
pd.isnull(df)

在这里插入图片描述

3.pd.notnull()【检测是否存在缺失值】

# True:~NaN  False:NaN
pd.notnull(df)

在这里插入图片描述

4.isnull()【检测是否存在缺失值】

# 用法与pd.isnull()一样
df.isnull()

在这里插入图片描述

5.notnull()【检测是否存在缺失值】

# 用法与pd.notnull()一样
df.notnull()

在这里插入图片描述

6.过滤数据,保留~NaN数据【很重要】

cond = pd.notnull(df)
line = df[df.isnull().values == True]  # 查找有缺失值的行
all_line = list(df.index)  # 获取所有数据的索引
all_line.remove(line.index)  # 将有缺失值的索引删除
df2 = df.iloc[all_line]  # 获取没有缺失值的数据

在这里插入图片描述

7.缺失值处理,去掉空值

1. 去掉为空的行数据【很重要】
2. 去掉为空的列数据【很重要】
3.dropna()删除(只能删除空值)【很重要】


all()与any()需要配合isnull()或notnull()一起使用
内置方法axis=0、1判断是对行操作还是对列进行操作,默认为0 索引是columns
all() 必须都为True,才会为True 类似于and
any() 只要有一个为True,就会为True 类似于 or
dropna():删除空值
fillna():填充空值

7.1 源数据

data = np.random.randint(0, 100, size=(5, 5))
df = pd.DataFrame(data=data, columns=list('ABCDE'))
df.loc[2, 'B'] = np.nan
df.loc[3, 'C'] = None

在这里插入图片描述

7.2 any()【只要有一个为True,就会为True 类似于 or】

如果不写axis默认等于0,对列进行操作

df.isnull().any()

在这里插入图片描述

7.3 all()【必须都为True,才会为True 类似于and】

df.isnull().all()

在这里插入图片描述

7.4 去掉为空的行数据【很重要】

注意:axis=1是对行进行操作

cond = df.isnull().any(axis=1)
df = df[~cond]

在这里插入图片描述

7.4 去掉为空的列数据【很重要】

cond = df.isnull().any(axis=0)
df.loc[:, ~cond]

在这里插入图片描述

7.4 dropna()删除(只能删除空值)【很重要】

df.dropna()  # 默认情况下删除有空的行
# df.dropna(axis=1)  # 删除有空的列

在这里插入图片描述

7.5 源数据

df['F'] = [np.nan, np.nan, np.nan, np.nan, np.nan]  # 插入一列数据
df = df.append(pd.DataFrame({"A": np.nan, "B": np.nan, "C": np.nan, "D": np.nan, "E": np.nan, "F": np.nan}, index=[5]))

7.6 行或列中,只要有一个NaN就删除

# how默认是any 只要有一个空数据就删除所在的列或行
# axis = 0 删除行(默认)
# axis = 1 删除列
df.dropna(how='any')

在这里插入图片描述

7.7 行或列中,都为NaN时才会删除

# all 必须这一列或者这一行中的所有数据都为NaN的时候才会删除
# dropna()会生成一个新的数据,不会修改原有数据
# 如果要修改原有数据,可以使用inplace = True
df.dropna(how='all', inplace=True)

在这里插入图片描述

7.缺失值处理,填充

# value=填充的值
# limit=限制填充的次数
# method=填充的方式 这是对于行来计算的
# ffill:向前填充
# backfill:向后填充
# 如果想对列计算,需要使用axis=1对列进行填充
df

在这里插入图片描述

7.1 向前填充

df.fillna(method='ffill')

在这里插入图片描述

7.2 向后填充

df.fillna(method='backfill')

因为数据后面已经没有值了,所以还是NaN
在这里插入图片描述

7.3 向左填充

df.fillna(method='ffill', axis=1)

在这里插入图片描述

7.5 向右填充

df.fillna(method='backfill', axis=1)

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Monly21

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值