Pandas - df.pipe() - 关键字不能是表达式



目前我在熊猫方面遇到了一些麻烦...

我正在尝试定义以下功能:

def outlier(frame, col1, col2):
    (frame.pipe(frame.loc[:,"lower"] = frame.groupby(by='col1')['col2'].transform(lower))
     frame.pipe(frame.loc[:,"upper"] = frame.groupby(by='col1')['col2'].transform(upper))
     frame.pipe(frame.loc[:,"outlier"] = (frame['col2'] < frame['lower'])|(frame['col2'] > frame['upper']))
    )

不幸的是我得到了:SyntaxError:关键字不能是表达式

某些东西使我无法看到树木的木头,也无法找到我明显愚蠢的错误...

在以下代码中起作用:

这是函数"上"one_answers"下":

lower = lambda x: x.quantile(q=.25) - (1.5*(x.quantile(q=.75)-x.quantile(q=.25)))
upper = lambda x: x.quantile(q=.75) + (1.5*(x.quantile(q=.75)-x.quantile(q=.25)))

这是我的"意大利面条代码",将新列添加到数据框中:

acid81.loc[:,"lower"] = acid81.groupby(by='Ursprung')['Analysenwert'].transform(lower)
acid81.loc[:,"upper"] = acid81.groupby(by='Ursprung')['Analysenwert'].transform(upper)
acid81.loc[:,"outlier"] = (acid81['Analysenwert'] < acid81['lower']) | (acid81['Analysenwert'] > acid81['upper'])

供参考,在这里与OP在评论中进行讨论的答案:

问题是您使用了pipe错误。pipe的第一个参数应该是一个函数。有关更多信息,请参见官方文档:

参数:

func:功能

功能应用于NDFrame。args,尤尔格斯(Kwargs(被传给了弹性。或者,一个(可callable,data_keyword(元组,其中data_keyword是一个字符串,指示callable的关键字,期望ndframe。

args:位置论点传递到func。

kwargs:关键字参数的字典传递到func中。

您必须找到另一种创建数据框的方法。

最简单的解决方案就是将其遗漏。在这种情况下,您无需使用pipe。只需坚持您的示例,然后将其放入outlier功能中即可。然后返回结果框架。

最新更新