• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
p-boost-q
博客园    首页    新随笔    联系   管理    订阅  订阅
numpy基本操作3

python中的NAN和inf

NAN(nan):not a number 表示不是一个数字,

什么时候出现NAN呢:

当我们读取本地文件为float的时候,数据有缺失的情况下,这个缺失的数据就会被填补成NAN,还有一种情况是出现了不合理的运算:无穷大减去无穷大,无穷小减去无穷小;

inf : 表示无穷大, -inf表示无穷小。

什么时候出现inf呢:

一个数字除以0的时候。inf也是float类型。

NAN 的性质:

  1. 两个NAN不相等,这个性质可以计算出一个数组中NAN的个数

    t1 = np.array(np.random.uniform(1,5,(4,5)))
    t1[2,3] = np.nan
    t1[1,3] = np.nan
    print(np.count_nonzero(t1 == t1))
   print(np.count_nonzero(t1 != t1))
  #答案是18和2

  2. nan和任何数值进行计算都是nan,顺便看一下怎么求均值和中值

    t1 = np.array(np.random.uniform(1,5,(4,5)))
    t1[2,3] = np.nan
    t1[1,3] = np.nan
    print(t1)
    print(np.count_nonzero(t1 != t1))
    #求中值和均值
    means = np.mean(t1,axis=0) #每列的均值
    print(means)
    median = np.median(t1,axis=1) #每行的中值
    print(median)

 

 

 做一道作业题:

把一个数组中是nan的用均值替换。

 

def fill_nan_use_means(t1):
    for i in range(t1.shape[1]):   #按照列来遍历
        col_temp = t1[:,i] #取出第i列
        nan_num = np.count_nonzero(col_temp != col_temp) #计算出每列的nan的个数
        if nan_num != 0: #如果存在nan
            print("#"*100)
            temp_not_nan_col = col_temp[col_temp == col_temp] #就把非nan的列整理出给temp_not_nan_col
            print(temp_not_nan_col)
            print("#" * 100)
            col_temp[np.isnan(col_temp)] = temp_not_nan_col.mean() #把是nan的位置用均值来代替
    return t1
if __name__ == '__main__':
    t1 = np.random.randint(1,10,(4,5)).astype(float)
    t1[1:3,2:3] = np.nan
    print("*"*30,"填充前","*"*30)
    print(t1)
    t1 = fill_nan_use_means(t1)
    print("*" * 30, "填充后", "*" * 30)
    print(t1)

 

 

 

 

  

posted on 2021-01-24 13:09  p-boost-q  阅读(178)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3