关于numpy和pandas中关于nan的几个总结

摘要

  • 仅个人总结,不保证绝对正确,
  • 仅服务个人。
  • 本意是纪录文章最后的黑体字部分。

正文

  • 在计算平均值等类似操作的时候numpy中的nan会参与计算,而pandas的nan不会。
  • np中的nan是float类型,所以在进行相关操作的时候需要将别的数据类型(int->float)进行转换,但是pandas中你不用考虑这个问题。
  • 对比下面两片将nan替换为均值的代码就可以知道两者在处理nan数值的不同之处了:
代码1(numpy):
import numpy as np
def replace_nan(t):
    for i in range(t.shape[1]): 
        t_col=t[:,i] 
        nan_num=np.count_nonzero(t_col != t_col)
        if nan_num !=0: 
            no_have_nan=t_col[t_col==t_col] 
            t_col[np.isnan(t_col)]=no_have_nan.mean()
    return t


t = np.arange(12).reshape((3,4)).astype("float")
t[1,2:] = np.nan
print(t)
replace_nan(t)
print(t)
代码1(pandas):
In [64]: t2
Out[64]: 
    age      name      tel
0  32.0  xiaowang  10086.0
1   NaN  xiaohong  10000.0
2  22.0  xiaowang      NaN
In [67]: t2.fillna(t2.mean())
Out[67]:
    age      name      tel
0  32.0  xiaowang  10086.0
1  27.0  xiaohong  10000.0
2  22.0  xiaowang  10043.0

# 你也可以只处理age这一列
t2["age"]=t2["age"].fillna(t2["age"].mean())  

另外

  • 在爬虫中爬取数据的时候,如果有些字段没有数据,就不要这些字段添加数据,就让其空着(也就是xpath中的extract_first()),到时候在数据分析的时候就会自动将该字段转为Nan的。(经过测试发现(基于csv文件测试):如果根本没有该字段,或者存储的时候存的是null,在读取的时候会自动转为nan的
  • 一般数据存储的时候会选择mongodb的原因之一是:mysql中是不允许没有字段的,即使什么没有也会显示NULL,但是mongodb是允许某些字段是不存在的。
  • 处理数据为0的数据时一般可以:t[t==0]=np.nan(这是因为在计算均值的时候nan不会参加计算,但是0会)
  • 如果有的缺失值是用?标记的话,那么可以用df[“xx”].str.replace("?",np.nan)来处理该数据。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值