如何在Pandas DataFrame中筛选区间外的值(避免行迭代)
Pandas筛选DataFrame区间外值的高效方法
你的报错根源是用了Python原生的or运算符,Pandas的布尔Series不能直接用or/and——这些运算符会试图判断整个Series的真假,导致歧义。必须用按位运算符|(或)、&(与)来组合布尔条件。
修正后的基础写法
import pandas as pd import numpy as np df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD')) fence_low = 30 fence_high = 70 # 用按位或 | 替代 or,每个条件需单独加括号 df_out = df[(df['A'] <= fence_low) | (df['A'] >= fence_high)] df_out
更简洁的写法(推荐)
利用between方法结合取反操作,代码更易读:
# ~ 表示取反,筛选A列不在[30,70]区间内的行(between默认左闭右闭) df_out = df[~df['A'].between(fence_low, fence_high)]
以上两种方法都无需遍历行,完全利用Pandas的矢量化操作,效率远高于逐行遍历。
内容的提问来源于stack exchange,提问作者JCV
相关产品推荐
相关产品推荐

