0907---Pandas 数据清洗过程中空值的删除处理

Pandas 数据清洗过程中空值的删除处理

应用 Pandas DataFrame 类方法 dropna 对数据集中的空值按照给定的参数进行删除处理。

DataFrame.dropna( self, axis: ‘Axis’ = 0, how: ‘str’ = ‘any’, thresh=None, subset: ‘IndexLabel’ = None, inplace: ‘bool’ = False, )

重要参数解释

  1. axis: 选择处理的轴方向,默认是0轴,即index方向,以行记录为处理单元;如果选择为1轴,即columns方向,以列为处理单元。阅读下面的简单案例能更深刻的理解。
  2. how: 默认为 any,即在处理的单元中只要存在NaN值就删除;如果选择 how=‘all’,则处理的单元中所有的值全是NaN 才删除。
  3. thresh:可选参数,不常用。需要处理单元中有多少非NaN值,该处理单元才不被删除。
  4. subset:判断的依据为子列。
  5. inplace:默认为False,即不改变数据集本身;当选择inplace=True,改变数据集本身。

运行环境为 Jupyter notebook

一 引入包

%matplotlib notebook
import numpy as np
import pandas as pd

二 构造试验数据

df = pd.DataFrame(np.arange(24).reshape(6,4),columns=['A','B','C','D'])
df.iloc[2,2:]=np.nan
df.loc[4,'B']=np.nan
df.loc[0,'C']=np.nan
df

	A  	B	  C   D
0	0	1.0	NaN	3.0
1	4	5.0	6.0	7.0
2	8	9.0	NaN	NaN
3	12	13.0	14.0	15.0
4	16	NaN	18.0	19.0
5	20	21.0	22.0	23.0

三 基于上述数据的操作

# 统计每列中 NaN的数量
df.isna().sum()

A    0
B    1
C    2
D    1
dtype: int64
# 默认以0轴,即index方向,以行记录为处理单元,如果一行中存在 NaN值,就删除该行
df1 = df.dropna()  #或  df1 = df.dropna(axis=0,how='any')
df1

	A	 B	    C	    D
1	4	5.0	6.0	7.0
3	12	13.0	14.0	15.0
5	20	21.0	22.0	23.0

# 以1轴,即columns方向,以列为处理单元,如果一列中存在 NaN值,就删除该列
df2 = df.dropna(axis=1, how='any')
df2

	A
0	0
1	4
2	8
3	12
4	16
5	20
# 默认以0轴,即index方向,以行记录为处理单元,如果一行中'C'或'D'列存在 NaN值,就删除该行
df3 = df.dropna(axis=0,how='any',subset=['C','D'])
df3

	A	 B	  C	   D
1	4	5.0	6.0	7.0
3	12	13.0	14.0	15.0
4	16	NaN	18.0	19.0
5	20	21.0	22.0	23.0
# 以1轴,即columns方向,以列为处理单元,如果一列中的第3或4行中存在 NaN值,就删除该列
df4 = df.dropna(axis=1,how='any',subset=[3,4])
df4

	A	  C	 D
0	0	NaN	3.0
1	4	6.0	7.0
2	8	NaN	NaN
3	12	14.0	15.0
4	16	18.0	19.0
5	20	22.0	23.0
# 默认以0轴,即index方向,以行记录为处理单元,如果一行中非NaN值数量小于3,就删除该行
df5 = df.dropna(axis=0,how='any',thresh=3)
df5

   A	 B	    C	    D
0	0	1.0	NaN	3.0
1	4	5.0	6.0	7.0
3	12	13.0	14.0	15.0
4	16	NaN	18.0	19.0
5	20	21.0	22.0	23.0

四 重新构造测试数据(测试all的操作)

df = pd.DataFrame(np.arange(24).reshape(6, 4), columns=['A', 'B', 'C', 'D'])
df.iloc[2, :] = np.nan
df.loc[4, 'B'] = np.nan
df.loc[:, 'C'] = np.nan
df

   A	   B	   C	    D
0	0.0	1.0	NaN	3.0
1	4.0	5.0	NaN	7.0
2	NaN	NaN	NaN	NaN
3	12.0	13.0	NaN	15.0
4	16.0	NaN	NaN	19.0
5	20.0	21.0	NaN	23.0

五 有关操作

df.isna().sum()

A    1
B    2
C    6
D    1
dtype: int64
df1 = df.dropna(axis=0,how='all')
df1

    A	    B	    C   	D
0	0.0	1.0	NaN	3.0
1	4.0	5.0	NaN	7.0
3	12.0	13.0	NaN	15.0
4	16.0	NaN	NaN	19.0
5	20.0	21.0	NaN	23.0
df2 = df.dropna(thresh=3)
df2

    A	    B	    C   	D
0	0.0	1.0	NaN	3.0
1	4.0	5.0	NaN	7.0
3	12.0	13.0	NaN	15.0
5	20.0	21.0	NaN	23.0
df3=df.dropna(subset=['B'])
df3

    A	    B	    C	    D
0	0.0	1.0	NaN	3.0
1	4.0	5.0	NaN	7.0
3	12.0	13.0	NaN	15.0
5	20.0	21.0	NaN	23.0
df4 = df.dropna(axis=1,how='all')
df4

   A	   B	    D
0	0.0	1.0	3.0
1	4.0	5.0	7.0
2	NaN	NaN	NaN
3	12.0	13.0	15.0
4	16.0	NaN	19.0
5	20.0	21.0	23.0

​ 2022-09-07

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值