多条件叠加筛选时,传统布尔索引代码冗长、可读性差,df.query()支持类SQL字符串表达式,简化复杂多维度筛选逻辑,大幅精简代码。场景:筛选数码品类、售价1000~5000、库存大于50的可售商品,同时排除滞销低销量商品,使用query轻量化实现多层逻辑过滤。核心知识点:query字符串表达式、外部变量@引用、区间判断、多逻辑组合、文本匹配筛选。① 字段含义说明
② 生成测试数据
import pandas as pdimport numpy as npnp.random.seed(88)df = pd.DataFrame({ "goods_id": range(1, 150), "category": np.random.choice(["数码","家居","美妆"], 149), "price": np.random.uniform(120, 6800, 149).round(2), "stock": np.random.randint(0, 300, 149), "monthly_sales": np.random.randint(0, 1200, 149), "on_sale": np.random.choice([0, 1], 149)})df.to_excel("query_goods_data.xlsx", index=False)print("query多条件筛选商品测试数据生成完成")
查看测试数据
③ 核心代码
import pandas as pddf = pd.read_excel("query_goods_data.xlsx")# 定义外部阈值变量,query通过@调用min_price = 1000max_price = 5000min_stock = 50min_sales = 100# 复杂多条件筛选,一行完成,可读性远优于布尔索引filter_df = df.query( "category == '数码' " "& (@min_price <= price <= @max_price) " "& stock >= @min_stock " "& monthly_sales >= @min_sales " "& on_sale == 1")print("符合筛选条件商品总数:", len(filter_df))print("\n筛选结果前8行:")print(filter_df[["goods_id","category","price","stock","monthly_sales"]].head(8))
结果展示
总结
query语法用自然字符串表达筛选逻辑,多条件场景可读性极强;支持@变量引用外部参数,动态阈值筛选更便捷;适合临时取数、快速数据探查,复杂报表批量筛选可搭配循环动态拼接表达式。