Python中缺失值分类及Pandas中缺失数据处理函数

一、Python中缺失值分类

Python中有三种缺失值(空值):

形式 含义
None Python内置的None值,如创建一个空的列表list=[]
NA 在pandas中,将缺失值表示为NA,表示不可用not available,主要表示为np.nan
NaN 对于数值数据,pandas使用浮点值NaN(Not a Number)表示缺失数据

二、缺失值处理相关操作

通常遇到缺失值需要先找出或查看缺失值isnull()/notnull(),然后填充fillna()或删除dropna()缺失值。
本文案例数据集下载(也可评论或私信作者获取数据集)

  1. 查找缺失值isnull()以及notnull()函数

该方法对对象进行元素级操作,返回一组布尔值True/False。

#导入数据
fileDf=pd.read_excel('Python数据/朝阳医院2018年销售数据.xlsx',sheet_name='Sheet1')
fileDf.head()
>>>
             购药时间          社保卡号      商品编码     商品名称  销售数量   应收金额    实收金额
0  2018-01-01 星期五  1.616528e+06  236701.0  强力VC银翘片   6.0   82.8   69.00
1  2018-01-02 星期六  1.616528e+06  236701.0  清热解毒口服液   1.0   28.0   24.64
2  2018-01-06 星期三  1.260283e+07  236701.0       感康   2.0   16.8   15.00
3  2018-01-11 星期一  1.007034e+10  236701.0    三九感冒灵   1.0   28.0   28.00
4  2018-01-15 星期五  1.015543e+08  236701.0    三九感冒灵   8.0  224.0  208.00

#isnull()返回一组布尔值
print(fileDf['购药时间'].isnull().head())
>>>
0    False
1    False
2    False
3    False
4    False
Name: 购药时间, dtype: bool

#查看某些有缺失值字段的数据情况
fileDf[fileDf['购药时间'].isnull()|fileDf['社保卡号'].isnull()]
>>>
                购药时间        社保卡号       商品编码 商品名称  销售数量  应收金额   实收金额
6570             NaN  11778628.0  2367011.0  高特灵  10.0  56.0  56.00
6571  2018-04-25 星期二         NaN  2367011.0  高特灵   2.0  11.2   9.86
6574             NaN         NaN        NaN  NaN   NaN   NaN    NaN
  1. 填充缺失值fillna()函数

fillna(value=None, axis=0, inplace=False)利用value来填充相应的缺失值,默认inplace不替换原数据只是产生副本。

#填充缺失值
print('填充前缺失情况:',fileDf[['购药时间','社保卡号']][fileDf['购药时间'].isnull()|fileDf['社保卡号'].isnull()])
#利用购药时间列的众数来填充缺失值
fileDf['购药时间'].fillna(fileDf['购药时间'].mode()[0],inplace=True)
print('填充后缺失情况:',fileDf[['购药时间','社保卡号']][fileDf['购药时间'].isnull()|fileDf['社保卡号'].isnull()])
>>>
填充前缺失情况:    购药时间        社保卡号
		6570  NaN            11778628.0
		6571  2018-04-25 星期二   NaN
		6574  NaN                NaN

填充后缺失情况:    购药时间        社保卡号
		6571  2018-04-25 星期二   NaN
		6574  2018-04-15 星期五   NaN
  1. 剔除缺失值dropna()函数

dropna(subset=[],axis=0, how='any', thresh=None)删除指定列subset中有缺失值的数据,默认inplace不替换原数据只是产生副本,how可选any或all,all仅在切片中数据全部缺失时才剔除。

#删除缺失值
print('删除前缺失情况:',fileDf[['购药时间','社保卡号']][fileDf['购药时间'].isnull()|fileDf['社保卡号'].isnull()])
#删除购药时间中有缺失值的数据
fileDf.dropna(subset=['购药时间'],inplace=True)
print('删除后缺失情况:',fileDf[['购药时间','社保卡号']][fileDf['购药时间'].isnull()|fileDf['社保卡号'].isnull()])
>>>
删除前缺失情况:    购药时间        社保卡号
   6570             NaN       11778628.0
   6571       2018-04-25 星期二    NaN
   6574             NaN           NaN
删除后缺失情况:    购药时间        社保卡号
   6571       2018-04-25 星期二    NaN

猜你喜欢

转载自blog.csdn.net/MsSpark/article/details/83218610
今日推荐