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

Original: https://blog.csdn.net/gmriwyf/article/details/126745829
Author: gmriwyf
Title: 0907—Pandas 数据清洗过程中空值的删除处理

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/739716/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球