np.where(arr<0,0,arr)数据替换 np.where(条件, 满足条件时填的值, 不满足条件时填的值)demo把数组中小于0的数都替换为0import numpy as np arr np.array([-2.5, 3.0, -0.5, 0, 5.5, -1.2, 4.0]) result np.where(arr 0, 0, arr) print(处理结果, result)处理结果 [0. 3. 0. 0. 5.5 0. 4. ]注意这俩方法与where差不多np.clip(arr, 0, None)也是单边限制下限为0效果完全一样。np.clip(arr, -5, 5)双边限制小于 -5 的变 -5大于 5 的变 5中间的保留。where的其他用法1、找出数组满足条件的索引arr np.array([10, 25, 30, 15, 28]) # 找出 arr 中大于 20 的数字都在哪个位置 indexes np.where(arr 20) print(indexes) # 输出(array([1, 2, 4]),) - 意思是下标 1、2、4 的位置满足条件 # 利用这个索引可以把这些位置的数全部打印出来 print(arr[indexes]) # 输出[25 30 28]在实际数据清洗中的妙用如果你想删除所有异常值而不是替换你就用单参数where找到好数据的下标然后筛选出来。# 假设温度数据只想要大于0且小于100的正常数据把异常的丢掉 raw np.array([36.5, -5, 45.0, 200, 36.6]) normal_indexes np.where((raw 0) (raw 100)) clean_data raw[normal_indexes] print(clean_data) # 输出[36.5 45.0 36.6] (-5 和 200 被丢掉了)2、复合逻辑且 或 |非 ~arr np.array([-5, 0, 10, 25, 100]) # 条件大于等于 0 并且 小于等于 50 result np.where((arr 0) (arr 50), arr, -999) # 不满足的设为 -999 print(result) # 输出[-999 0 10 25 -999]注意在 NumPy 中逻辑“与”必须用逻辑“或”用|千万不能用 Python 的and和or3、嵌套多条件实现if...elif...elsewhere支持嵌套用来处理“不止两种情况”的分支。比如大于 0 的设为 1等于 0 的设为 0小于 0 的设为 -1。arr np.array([-2, 0, 3]) # 外层判断 0 吗如果是再进入内层判断是不是等于 0 result np.where(arr 0, np.where(arr 0, 0, 1), -1) print(result) # 输出[-1 0 1]如果条件超过 3 个分支用np.select代码会更清晰4、结合np.where修改原始数据where 可以直接放在赋值语句的等号左边借助单参数模式拿到的索引 arr np.array([1, 2, 3, 4, 5]) # 找出所有大于3的位置直接将这些位置上的值改为 100 arr[np.where(arr 3)] 100 print(arr) # 输出[1 2 3 100 100]三个参数造新值两个参数找位置。1、看到3 个参数条件AB它就是“盖浇饭”满足条件的浇A不满足的浇B生成新饭。2、看到1 个参数只有条件它就是“定位器”只告诉你哪里有金矿下标挖不挖随你。