当Series(sqlalchemy.sql.and_ values)出现时,DataFrame.apply返回DataFrame

时间:2016-12-06 19:24:23

标签: pandas sqlalchemy

我正在尝试编写一系列 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 )?

1 个答案:

答案 0 :(得分:0)

以下解决了这个问题:

s = df.apply(lambda row: and_(wc.__eq__(row[c.name]) for c in where_cols), axis=1)

如果有人通过编辑此解决方案来解释 __ eq __ == 比较操作与我的问题相关的差异,我很想知道。谢谢!