是否可以编译或保存Pandas查询语句以便后续重复使用?
Pandas查询语句复用实现方案
Pandas原生没有直接支持你示例中调用pd.DataFrame.query()生成可复用查询对象的写法,但有两种和需求匹配度很高的实现方式,使用体验和预编译复用效果接近:
方案1:高阶函数封装(最推荐)
这种方式和你预期的调用逻辑完全一致,仅调用形式略有差异,无侵入性:
def create_query(query_str: str): def run_query(df): return df.query(query_str) return run_query # 预定义查询,相当于你要的query_object query_object = create_query('a > 5 & b < 9') # 直接应用到不同的DataFrame上 res1 = query_object(mydf1) res2 = query_object(mydf2)
如果一定要贴合你示例中mydf1.query_object()的调用形式,可以给DataFrame绑定自定义属性,但不建议大规模使用,容易污染类命名空间:
# 绑定固定查询到DataFrame类 pd.DataFrame.query_object = lambda self: self.query('a > 5 & b < 9') res1 = mydf1.query_object() res2 = mydf2.query_object()
方案2:直接存储查询字符串
你目前在用的存储查询字符串的方案,本身已经具备近似预编译的性能:Pandas底层对query方法的输入字符串做了全局缓存,相同字符串重复调用时不需要重复解析语法树,性能和显式预编译没有明显差异:
# 预定义查询常量 MY_FILTER = 'a > 5 & b < 9' res1 = mydf1.query(MY_FILTER) res2 = mydf2.query(MY_FILTER)
目前Pandas官方没有提供显式的查询预编译API,上述两种方案已经是原生支持范围内最贴合需求的实现。
内容的提问来源于stack exchange,提问作者mic
相关产品推荐
相关产品推荐

