鱼C论坛

 找回密码
 立即注册
查看: 2677|回复: 16

小白numpy库使用疑问

[复制链接]
发表于 2021-8-4 13:17:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Remy-小野兔 于 2021-8-4 13:19 编辑

scores = np.loadtxt("cj.csv",delimiter=",",skiprows=1,encoding="utf-8",dtype=np.str)
scores[scores == ''] = np.NAN
新手想问一下,问什么采用np.NAN替换空值后最后得到的是na不是nan呢?
f5bbdac8304b01343c4784ff73ed1b9.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-8-4 13:33:15 | 显示全部楼层

回帖奖励 +2 鱼币

你可以看看他们两个相不相等
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-4 13:34:54 | 显示全部楼层
我记得nan是个浮点数来着,好像怎么运算都为nan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-4 14:18:31 | 显示全部楼层
?可是都是nan也是不相等呀,你用np.nan == np.nan,它都会给你报false的。而且nan表示是不是数值,而na代表缺失值不是吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-4 15:49:11 | 显示全部楼层
试试 np.nan
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-4 16:08:37 | 显示全部楼层
哪来的代码啊,好像语法就是错的啊。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-4 16:36:22 | 显示全部楼层

试过了,还是一样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-4 16:37:42 | 显示全部楼层
nahongyan1997 发表于 2021-8-4 16:08
哪来的代码啊,好像语法就是错的啊。

如果语法错的话它应该报错呀,可是数组还是读了出来,只是空值本来想让它变nan的结果变成na
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-5 08:46:32 | 显示全部楼层
本帖最后由 nahongyan1997 于 2021-8-5 08:48 编辑

你的

scores[scores == '']=np.nan 并没有替换掉空值,而是替换掉了元组的第一个元素。
元祖的数据不可以改变,所以你那个位置原本就是 na ,根本就没变。

毕竟我没有你那个文件所以答案可能是错,但是第一句话肯定是对的,
如果答案还是不对的的话你可以把 csv 文件给我我可以给你看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-5 15:45:24 | 显示全部楼层
你的代码并不完整。。
首先,先确认你的 scores 里是否有 '' 空值, scores[scores=='']  # --> 有吗?
其次,因为 scores 的 dtype 是 np.str 字符串类型,而 np.NaN / np.NAN / np.nan  是 浮点数类型。
所以,若的确过滤出有 空值(缺失值),那么 scores[scores==''] = np.NaN  或 scores[np.where(scores=='')] = np.NaN  
# --> 这样替换 会先将浮点数 np.NaN 转为 字符串的 'nan' ,并赋值替换。
# 这样"成功替换"后,打印scores显示的结果是:原来的 '', 变成了 'nan'

你要替换 'na', 也是同理,但要 先确保过滤出来的 的确是它们。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-6 17:39:23 | 显示全部楼层
阿奇_o 发表于 2021-8-5 15:45
你的代码并不完整。。
首先,先确认你的 scores 里是否有 '' 空值, scores[scores=='']  # --> 有吗?
...

因为是练习创的数据,是设置了空值‘’的。但是我实际的问题是我预想替换后显示'nan',但是它显示了'na'运行结果我在上面的图上是有的,最开始不替换它直接显示的是‘’,但是通过np.nan替换后它显示是‘na’,那么说明结果的确是被替换了,只是替换成了'na',不是我想要的'nan'。最后我换了另外一个练习文件,用同样的代码是成功将读取的文件里的‘’替换为'nan'的。我不明白,同样的代码,对这个文件为什么就不可以,两个文件encoding都是utf-8的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 20:37:14 | 显示全部楼层
Remy-小野兔 发表于 2021-8-6 17:39
因为是练习创的数据,是设置了空值‘’的。但是我实际的问题是我预想替换后显示'nan',但是它显示了'na' ...

你用的是哪个版本的numpy, 缺失值np.nan的字符显示应该是 'nan',怎么会是'na'?

其次,程序是"死脑筋"的,"你看见的"不等于就是"程序处理的",排除疑问需要一步步验证……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-6 21:29:20 | 显示全部楼层
阿奇_o 发表于 2021-8-6 20:37
你用的是哪个版本的numpy, 缺失值np.nan的字符显示应该是 'nan',怎么会是'na'?

其次,程序是"死脑筋 ...

Anaconda3中的jupyter notebook ,配置是python3,另外不替换值读取的结果和替换后的如图所示,我实在是弄不清楚
183d79c3b388ce9f319ca20aa411ea7.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-8-6 23:17:38 | 显示全部楼层
Remy-小野兔 发表于 2021-8-6 21:29
Anaconda3中的jupyter notebook ,配置是python3,另外不替换值读取的结果和替换后的如图所示,我实在是弄 ...

这个'na',还是'nan',倒不是关键。关键是,若要进行运算,进行分组统计的时候,要注意 缺失值的类型和行为。
另外,我的numpy是1.17。
  1. scores = np.loadtxt('testdata.csv', dtype=np.str, delimiter=',', skiprows=1)
  2. scores
  3. array([['1', 'alice', '88'],
  4.        ['2', 'bill', ''],
  5.        ['3', 'cat', ''],
  6.        ['4', 'david', '100']], dtype='<U5')
  7. np.NAN
  8. nan
  9. scores[scores==''] = np.NAN
  10. scores
  11. array([['1', 'alice', '88'],
  12.        ['2', 'bill', 'nan'],
  13.        ['3', 'cat', 'nan'],
  14.        ['4', 'david', '100']], dtype='<U5')
  15. type(scores[2][2])
  16. numpy.str_
  17. scores[2][2] is np.NAN
  18. False
  19. np.__version__
  20. '1.17.1'
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-8-7 08:19:36 | 显示全部楼层
阿奇_o 发表于 2021-8-6 23:17
这个'na',还是'nan',倒不是关键。关键是,若要进行运算,进行分组统计的时候,要注意 缺失值的类型和行 ...

因为nan是浮点数,na不是浮点数,我后面直接改数据为浮点数的时候就不能一步完成了。我看了我的numpy版本是1.15.1,我更换版本试试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-10-27 17:04:20 | 显示全部楼层
将cvs中数据的数值类型改为数值应该就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-11-3 10:43:29 | 显示全部楼层

                               
登录/注册后可看大图

如上图所示,不晓得这样你能不能理解


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 06:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表