You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对混合类型的DataFrame进行程序化查询?

动态生成适配混合类型的Pandas查询语句

我有一个混合类型的DataFrame:

import pandas as pd
df = pd.DataFrame({'gender':list('MMMFFF'),
                   'height':[4,5,4,5,5,4],
                   'age':[70,80,90,40,2,3]})

print(df)

我需要选取列对并基于这些列对过滤DataFrame,打算用程序化的query方法实现。

已知各列类型时,我可以这样写:

column = ['height', 'age', 'gender']
equal = ['>', '>', '==']
condition = [1.68, 20, 'F']

query = ' & '.join(f'{i} {j} {repr(k)}' for i, j, k in zip(column, equal, condition))
df.query(query)

但问题是我无法提前知晓传入列对的类型,能不能通过类型判断来适配查询逻辑,只给字符串类型的条件值添加引号?


已找到的解决方案:

yQuery = ' & '.join(['{}=={}'.format(self.query_type_setter(k,True),self.query_type_setter(v, False)) for k, v in yVal])


def query_type_setter(self, value, isColumn):
    """
    根据是否为字符串设置查询值
    :param value: 要处理的值
    :param isColumn: 是否为列名
    :return: 处理后的查询片段
    """
    if isColumn:
        return "`" + value + "`"
    if isinstance(value, str):
        return "'" + value + "'"
    else:
        return value

通过添加一个类型检测函数,自动为字符串类型的条件值加上单引号,列名用反引号包裹避免命名冲突。


内容的提问来源于stack exchange,提问作者mathlete42

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 15:08:32