爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 15081|回复: 2

[源代码] 数据处理万能魔法棒---where函数

[复制链接]

新浪微博达人勋

发表于 2022-9-30 18:21:41 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
1、需求缘起

数据库SQL语言、Python的numpy包、IDL语言,都有一个【where函数】,
数据处理工作中,where函数都起到至关重要的作用,
我常给Python初学者推荐这个函数,
灵活使用where函数,会有一种【所向披靡】的畅快感觉

2、numpy中的where

numpy.where函数的用途是:从一个[逻辑值序列]中找出True的索引,
它的最简模式如下:
x=[True,False,False,True,True]
p=np.where(x)
print(p)
# 结果:(array([0, 3, 4], dtype=int64),)

一个典型例子:

import numpy as np

# 生成随机数:
a=np.random.randint(-10,10,(10,))
b=np.random.randint(-10,10,(10,))

print('a=',a)  
# 打印: a= [ -8  -3   6  -4   3  -1  -7  -9   2 -10]
print('b=',b)
# 打印: b= [ 5 -9  2  9  6 -6  3  9  2  6]

p=np.where((np.abs(a-5)>2)&(np.abs(b-5)>2))

print('第1个逻辑语句的结果:\n',np.abs(a-5)>2)
# 打印: [ True  True False  True False  True  True  True  True  True]

print('第2个逻辑语句的结果:\n',np.abs(b-5)>2)
# 打印: [False  True  True  True False  True False  True  True False]

print('2个逻辑序列的交集:\n',(np.abs(a-5)>2)&(np.abs(b-5)>2))
# 打印: [False  True False  True False  True False  True  True False]













密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2022-9-30 19:46:20 | 显示全部楼层
呃,我倒是觉得 where 的主要用途是 x_new = np.where(cond, x_when_true, x_when_false),取 x_when_true 数组中对应于 cond 为真的部分,和 x_when_false 数组中对应于 cond 为假的部分,组合成一个新数组。
而 np.where(cond) 用法确实能以元组的形式返回 cond == True 部分的下标,但文档说了这种需求更推荐直接使用 np.nonzero(cond) 或 cond.nonzero() 获取。
再考虑到 pandas 里 where 也是根据 cond 的真假来赋值,但没有取下标的用法,那么认为是根据条件选值更好些。
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2022-9-30 20:51:26 | 显示全部楼层
灭火器 发表于 2022-9-30 19:46
呃,我倒是觉得 where 的主要用途是 x_new = np.where(cond, x_when_true, x_when_false),取 x_when_true  ...

不明觉厉,多谢赐教!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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