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

时间:2017-06-28 08:04:52

标签: python pandas

目前我对熊猫有点麻烦......

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

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:keyword不能是表达式

有些东西阻止我看到树木的木材,并发现我明显愚蠢的错误......

在以下代码中可行:

这是“上”和“下”的功能:

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)))

这是我的“意大利面条代码”,用于将新列添加到DataFrame中:

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'])

1 个答案:

答案 0 :(得分:0)

作为参考,这里是与OP在评论中讨论的答案:

问题是您使用pipe错误。 pipe的第一个参数应该是一个函数。有关详细信息,请参阅the official documentation

  

参数:

     

func:function

     

要应用于NDFrame的函数。 args和kwargs传入func。或者是(callable,data_keyword)元组,其中data_keyword是一个字符串,表示期望NDFrame的可调用关键字。

     

args:传递给func的位置参数。

     

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

您必须找到另一种创建DataFrame的方法。

最简单的解决方案就是将其排除在外。在这种情况下,您不需要使用pipe。只需坚持您的示例并将其放入outlier - 函数中。然后返回结果DataFrame。