如何使用NumPy/Pandas剔除数组中不在指定范围的值?
问题分析与修正
你的代码存在几个关键问题,导致无法正确筛选出1到1.3之间的数值:
- 循环变量误用:
for i in parallax里的i是parallax中的元素值,不是索引,所以parallax[i]会触发索引错误(比如元素是1.2时,用1.2当索引取Series的值肯定不对)。 - 条件逻辑错误:你当前的逻辑是只要数值>=1就添加,或者<=1.3就添加,这会把所有数值都保留(任何数要么>=1要么<=1.3),但你实际需要的是同时满足1 ≤ 数值 ≤ 1.3的元素。
np.append用法错误:np.append需要传入目标数组、要添加的元素这两个核心参数,且不会原地修改数组,需要重新赋值;用Python列表的话直接用append()方法更简单。
正确解法(优先推荐向量化操作,效率更高)
对于pandas Series或numpy数组,完全不需要用循环,直接用布尔索引就能高效处理数千条数据:
方法1:用pandas布尔索引
import pandas as pd # 读取数据 query_result = pd.read_csv('data_2.csv') parallax = query_result['parallax'] # 筛选1到1.3之间的数值(包含边界) parallax_range = parallax[(parallax >= 1) & (parallax <= 1.3)]
方法2:转成numpy数组后筛选
import pandas as pd import numpy as np query_result = pd.read_csv('data_2.csv') parallax = query_result['parallax'].to_numpy() # 筛选符合条件的元素 parallax_range = parallax[(parallax >= 1) & (parallax <= 1.3)]
如果一定要用循环(不推荐,效率低)
修正循环写法如下:
import pandas as pd import numpy as np query_result = pd.read_csv('data_2.csv') parallax = query_result['parallax'] parallax_range = [] for val in parallax: # 同时满足两个条件才保留 if 1 <= val <= 1.3: parallax_range.append(val) # 可选:转成numpy数组 parallax_range = np.array(parallax_range)
内容的提问来源于stack exchange,提问作者notcassandra
相关产品推荐
相关产品推荐

