ValueError: Input contains NaN, infinity or a value too large for dtype('float64').

python中nan值判断与处理

查看空值
df.head() #查看前5行数据
np.isnan(df).sum()  #获得nan的数量
np.isinf(df).sum()  #获得infinity的数量
df.isnull().any()   #判断哪些”列”存在缺失值
df[df.isnull().T.any().T]  #找出含有nan的所有行

空值处理
填充
#空值处理方式
data.fillna(data.mean(), inplace = True)#以均值填充
data.fillna(0, inplace = True)#以0填充


删除
删除空值所在的行:

df.dropna(axis=0, how='any', inplace=True)

axis:0-行操作(默认),1-列操作
how:any-只要有空值就删除(默认),all-全部为空值才删除
inplace:False-返回新的数据集(默认),True-在愿数据集上操作

对某一列进行判断并删除整行:

mydf.dropna(subset=['列名'],inplace=True)

subset参数指定列,inplace参数为修改原dataframe。如果不inplace=False或不设置,则需要接受修改后的返回数据。

np.isnan()和pd.isnull()对比
# 首先创建一个DataFrame:
bb = pd.DataFrame({'a':[0,1,2,np.nan]})
bb
 
>>>     a
    0    0.0
    1    1.0
    2    2.0
    3    NaN
 
# 先测试一下np.isnan()
np.isnan(bb)
>>>     a
    0    False
    1    False
    2    False
    3    True
# 值得一提的是,如果想获悉整个DataFrame有无空值,可以在此基础上这样做:
 
np.isnan(bb).all()
>>> a    False
    dtype: bool          # 这行是指返回值的dtype
 
# 再测试一下isnull()
pd.isnull(bb)
>>>     a
    0    False
    1    False
    2    False
    3    True
由上可见,其实np.isnan()和pd.isnull()都可以对不论是DataFrame、Python list还是仅仅一个数值进行空值检测。但一般在实际应用中,np.isnan()多用于单个值的检验,pd.isnull()用于对一个DataFrame或Series(整体)的检验。

参考资料:
https://blog.csdn.net/weixin_41712499/article/details/82719987
https://blog.csdn.net/weixin_42323343/article/details/98734039

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值