如何对混合类型的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
相关产品推荐
相关产品推荐

