Pandas 数据清洗过程中空值的删除处理
应用 Pandas DataFrame 类方法 dropna 对数据集中的空值按照给定的参数进行删除处理。
DataFrame.dropna( self, axis: ‘Axis’ = 0, how: ‘str’ = ‘any’, thresh=None, subset: ‘IndexLabel’ = None, inplace: ‘bool’ = False, )
重要参数解释
- axis: 选择处理的轴方向,默认是0轴,即index方向,以行记录为处理单元;如果选择为1轴,即columns方向,以列为处理单元。阅读下面的简单案例能更深刻的理解。
- how: 默认为 any,即在处理的单元中只要存在NaN值就删除;如果选择 how=’all’,则处理的单元中所有的值全是NaN 才删除。
- thresh:可选参数,不常用。需要处理单元中有多少非NaN值,该处理单元才不被删除。
- subset:判断的依据为子列。
- 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/
转载文章受原作者版权保护。转载请注明原作者出处!