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

本文介绍了Python中缺失值的分类,包括三种类型的空值。针对缺失值,文章讨论了如何使用Pandas的isnull()和notnull()函数进行查找,以及fillna()和dropna()函数进行填充或删除操作。示例中展示了如何处理数据集中缺失值的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Python中缺失值分类

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

形式含义
NonePython内置的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
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值