我正在尝试编写一系列 sqlalchemy.sql.and _ 值,以便在查询过滤器中传递给 sqlalchemy.sql.or _ 方法。这似乎在大多数情况下都有效,但我有一个案例,而不是创建 pandas.Series ,我的 df.apply 正在创建一个 pandas。数据帧
s = df.apply(lambda row: and_(row[c.name] == c for c in where_cols), axis=1)
当我检查此行中的类型时,我得到:
type(c) # returns sqlalchemy.sql.schema.Column
type(row[c.name] == c) # returns sqlalchemy.sql.elements.BinaryExpression
type(s) # returns pandas.DataFrame, where column headers are all c.name values
从我的 df.apply 下游,该系列使用如下:
or_list = s.tolist()
s = session.query(
*select_cols
).filter(
or_(*or_list)
).statement
我想了解为什么我的 df.apply 在这种情况下返回一个DataFrame。或者,更直接地说,为什么DataFrame.apply将sqlalchemy.sql.and_返回值解释为多个值?并且,在此解释过程中,标题是如何确定每个 c.name (此DataFrame中的列标题在值为的情况下标记为 c.name 是行[c.name] == c )?
答案 0 :(得分:0)
以下解决了这个问题:
s = df.apply(lambda row: and_(wc.__eq__(row[c.name]) for c in where_cols), axis=1)
如果有人通过编辑此解决方案来解释 __ eq __ 和 == 比较操作与我的问题相关的差异,我很想知道。谢谢!