qianshang666 发表于 2021-3-10 19:33

【笔记】python数据分析——条件逻辑运算

## 往期数据分析笔记
[【笔记】python数据分析——numpy初识1](https://www.52pojie.cn/thread-1381772-1-1.html)
[【笔记】python数据分析——numpy初识2](https://www.52pojie.cn/thread-1382691-1-1.html)
[【笔记】python数据分析——变换与编程中的轴](https://www.52pojie.cn/thread-1383508-1-1.html)
[【笔记】python数据分析——numpy随机数函数](https://www.52pojie.cn/thread-1386199-1-1.html)
[【笔记】python数据分析——numpy数组索引及切片](https://www.52pojie.cn/thread-1386446-1-1.html)
[【笔记】python数据分析——元素级运算及通用函数](https://www.52pojie.cn/thread-1387623-1-1.html)
## 条件逻辑运算
```
import numpy as np

arr1=np.array()
arr2=np.array()
arr3=np.array()
```
上面我定义了三个数组,但我想实现这样的一个想法:
当arr3中的值为True的时候,我们取出arr1中的数字
当arr3中的值为False的时候,我们取出arr2中的数字
最后我们要实现的应该就是取出1,6,3,8这四个数

### 花式索引方法
如果掌握了numpy数组索引及切片中的花式索引的话,应该是有思路的
```
print(arr1)
print(arr2)
```
运行结果:


但这个是两个数组呀,我希望它是同一个数组,可能又有对numpy数组的变换掌握的兄弟想将两个数组进行合并,我们可以试试
```
arr11 = arr1
arr22 = arr2
arr33 = np.concatenate()
print(arr33)
```
运行结果:


### where(类似python中的if...else)
我们使用where来实现我们上面想要的数据
```
print(np.where(arr3,arr1,arr2))
```
运行结果:

**where里面有三个参数,第一个参数是条件,第二个参数是满足第一个参数要如何改变,第三个参数是不满足第一个参数要如何改变**

接下来,我们创建一个三行三列的正态分布数组,然后我们把这个数组中大于零的数改为1,小于零的数改为零
```
arr4 = np.random.randn(3,3)
print(arr4)
print(np.where(arr4>0,1,0))
```
运行结果:
[[-0.62922747 -0.93531664 -0.09492486]
[ 0.3757405-0.234206280.85395805]
[-0.434516641.366968550.15523776]]
[

]

**where是可以实现嵌套操作的**
我们将上面那个例子再加大一下难度,如果大于零的数我们改为1,小于零但不小于-1的数改为0,小于-1的数我们改为-1
```
arr5 = np.random.randn(3,3)
print(arr5)
print(np.where(arr5>0,1,np.where(arr5<-1,-1,0)))
```
运行结果:
[[-1.319589840.420699    0.46218665]
[ 0.1276776   0.689221620.38048573]
[-0.79035943 -1.323315690.39631777]]
[[-111]
[ 111]
[ 0 -11]]

想给大家留一个小任务,就是创建一个三行三列的数据,然后把大于零的数改为True,小于零的数改为False,如果有兴趣自己试试的可以不往下翻,自己试试


我把上面的那个小任务答案发一下:
```
arr6 = np.random.randn(3,3)
print(np.where(arr6>0,True,False))
```

## 今日鸡汤
不生气要争气,不看破要突破,不嫉妒要欣赏,不托延要积极。心态决定状态,心胸决定格局,眼界决定境界。过错是短暂的遗憾,错过是永远的遗憾。生活就是在细细的回味里散发香味的,同时我们也是在用自己的双手创造着新的惊喜。
页: [1]
查看完整版本: 【笔记】python数据分析——条件逻辑运算